Django CreateView 忽略 get_success_url
Django CreateView ignoring get_success_url
除了忽略 get_success_url() 之外,我有以下有效的视图。它会将用户发送回表单的相同 url。用户已创建。视图 class 只是一个扩展的 createview,我在许多其他地方使用它都没有问题。
class SignUpView(BSModalCreateView):
model = User
form_class = SignUpForm
success_message = 'Please check your email to complete the registration'
template_name = 'form_modal.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['heading'] = 'Create ID'
return context
def form_valid(self, form):
user = form.save(commit=False)
user.is_active = False
user.save()
# current_site = get_current_site(request)
current_site = '127.0.0.1:8000'
mail_subject = 'Activate your account.'
message = render_to_string('registration/confirm_email.html', {
'user': user,
# 'domain': current_site.domain,
'domain': '127.0.0.1:8000',
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': default_token_generator.make_token(user),
})
to_email = form.cleaned_data.get('email')
email = EmailMessage(
mail_subject, message, to=[to_email]
)
email.send()
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse('dashboard')
我尝试了很多不同的方法都无济于事,但希望其他人可以提供帮助。
我做了更多测试,BSModal 似乎是阻止它的原因。我不确定为什么,但在创建用户时发送信号会更简单、更清晰。我在用户模型上创建了一个名为 is_self_registered 的字段并添加了接收者:
@receiver(post_save, sender=User)
def send_activate_email(sender, instance, created, **kwargs):
user = User.objects.get(pk=instance.id)
if created and user.is_self_registered:
print('do email thing')
如果其中一位管理员创建了 ID,它将处于活动状态。如果使用自助注册,则 id 未激活。
除了忽略 get_success_url() 之外,我有以下有效的视图。它会将用户发送回表单的相同 url。用户已创建。视图 class 只是一个扩展的 createview,我在许多其他地方使用它都没有问题。
class SignUpView(BSModalCreateView):
model = User
form_class = SignUpForm
success_message = 'Please check your email to complete the registration'
template_name = 'form_modal.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['heading'] = 'Create ID'
return context
def form_valid(self, form):
user = form.save(commit=False)
user.is_active = False
user.save()
# current_site = get_current_site(request)
current_site = '127.0.0.1:8000'
mail_subject = 'Activate your account.'
message = render_to_string('registration/confirm_email.html', {
'user': user,
# 'domain': current_site.domain,
'domain': '127.0.0.1:8000',
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': default_token_generator.make_token(user),
})
to_email = form.cleaned_data.get('email')
email = EmailMessage(
mail_subject, message, to=[to_email]
)
email.send()
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse('dashboard')
我尝试了很多不同的方法都无济于事,但希望其他人可以提供帮助。
我做了更多测试,BSModal 似乎是阻止它的原因。我不确定为什么,但在创建用户时发送信号会更简单、更清晰。我在用户模型上创建了一个名为 is_self_registered 的字段并添加了接收者:
@receiver(post_save, sender=User)
def send_activate_email(sender, instance, created, **kwargs):
user = User.objects.get(pk=instance.id)
if created and user.is_self_registered:
print('do email thing')
如果其中一位管理员创建了 ID,它将处于活动状态。如果使用自助注册,则 id 未激活。