(Django)在Django表单向导中保存自定义用户模型

2024-07-04 13:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在为用户创建多步骤注册页面时遇到问题。到目前为止,我有一个名为Account的自定义用户模型,我在其中添加了一些影响项目中其他内容的字段。当我只使用单步登记表时,模型运行良好。然而,当我转换到多步骤注册表单(使用Django表单向导)并将基本注册(电子邮件、用户名、密码)与其他字段分开后,我开始遇到一些困难。阅读Django表单向导文档没有多大帮助我还想指出,我正在注册时创建另一个模型(将我的自定义用户模型作为外键)。以下是我的代码:

forms.py

class RegisterForm1(UserCreationForm):
   email = forms.EmailField()

   class Meta:
      model = Account
      fields = ["username", "email", "password1", "password2", ]
      help_texts = {
        'username': None,
        'password1': None,
        'password2': None,
    }

    def __init__(self, *args, **kwargs):
        super(RegisterForm1, self).__init__(*args, **kwargs)
        self.fields['password1'].help_text = ''
        self.fields['password2'].help_text = ''

class RegisterForm2(forms.ModelForm):
    class Meta:
        model = Account
        fields = ["int_field", "char_field", ]

    def __init__(self, *args, **kwargs):
        super(RegisterForm2, self).__init__(*args, **kwargs)

views.py

class register_new(SessionWizardView):
template_name = "register/register.html"
form_list = [RegisterForm1, RegisterForm2]
def done(self, form_list, form_dict, **kwargs):
    form1 = RegisterForm1(self.request.POST)
    form2 = RegisterForm2(self.request.POST)
    if form1.is_valid() and form2.is_valid():   
        username = self.request.POST['username']
        email = self.request.POST['email']
        password = self.request.POST['password1']
        int_field = self.request.POST['int_field']
        char_field = self.request.POST['char_field']
        user = Account(username=username, email=email, password=password, int_field=int_field, char_field=char_field)
        user.save()
        ModelA.objects.create(user=user, classification="c")
        ModelA.objects.create(user=user, classification="h")
        ModelA.objects.create(user=user, classification="f")
        ModelA.objects.create(user=user, classification="e")
    return redirect('/')

这段代码甚至没有创建新用户(我可以看到在my/admin中没有发生任何事情)。我知道这与我的模型无关,因为当我使用简单的单步表单时,一切都正常

tl;dr I基本上希望为自定义用户模型建立一个多步骤注册表单,同时在注册时为用户创建一个新模型


Tags: 用户模型selffieldemailrequestusernameaccount
1条回答
网友
1楼 · 发布于 2024-07-04 13:34:16

首先,您不需要验证表单。当您进入完成功能时,根据文档,表单已经过验证

这可以通过以下方式删除:

form1 = RegisterForm1(self.request.POST)
form2 = RegisterForm2(self.request.POST)

Because all the forms are available in the form_list

在文档中,获取表单数据的方法之一如下:

form_data = {
 'form_data': [form.cleaned_data for form in form_list],
}

之后需要做的唯一一件事是从表单数据中获取值并创建用户obj

相关问题 更多 >

    热门问题