首页 > 解决方案 > 在 Django 中正确设置自定义登录重定向

问题描述

我有一个自定义用户模型(继承 AbstractUser):

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils.translation import ugettext_lazy as _    
from .managers import UserManager

class User(AbstractUser):
    username = None
    phone = models.CharField(max_length=16)
    email = models.EmailField(_('email address'), unique=True)
    is_director = models.BooleanField(default=False)
    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

以及处理注册表单的自定义视图:

class SignUpView(CreateView):
    template_name = 'form.html'
    form_class = UserRegisterForm
    form_title = "Family Registration Form"
    form_description = "For our younger participants, their parent or guardian should fill out this form."

    def get_success_url(self):
        return reverse_lazy('Participants:portal', kwargs={'slug': 'scst'})

由以下网址映射:

path('signup/', views.SignUpView.as_view(), name="signup"),

表单加载并成功创建用户。但是,我无法弄清楚如何正确重定向。具体来说,我正在寻找这个:

http://localhost:8000/scst/portal/

我得到:

http://localhost:8000/accounts/login/?next=/scst/portal/

我不明白如何摆脱这/accounts/login/?next=部分。我搜索了 CreateView 的各种 Classes 和 Mixins。我尝试过覆盖并尝试在文件get_redirect_url中设置模式。settings.pyHTML 的表单或提交元素中没有“下一个”值。我不知道要改变什么来解决这个问题。

标签: djangodjango-views

解决方案


可能是因为您的视图“参与者:门户”需要登录,您必须在注册后登录新用户,您可以在form_valid方法中进行。像那样

from django.contrib.auth import login

def form_valid(self, form)
    response = super().form_valid(form)
    login(self.request, self.object)
    return response
    

推荐阅读