0

尝试使用 django-formtools 创建用户。

表格.py

class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm):
        model = User
        fields = ('username', 'password1', 'password2')

class CustomProfileCreateForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('name', 'email')

视图.py

class SignupWizard(SessionWizardView):
    template_name = "user/registration.html"
    form_list = [CustomUserCreationForm, CustomProfileCreateForm]
    instance = None

    def get_form_instance(self, step):
        if self.instance is None:
            self.instance = User()
        return self.instance

    def done(self, form_list, **kwargs):
        self.instance.save()
        return render(self.request, 'done.html', {
            'form_data': [form.cleaned_data for form in form_list],
        })

一切正常,除了密码。未设置密码。如何正确保存表格

4

2 回答 2

0

最初解决了我的问题:

class RegistrationWizardView(SessionWizardView):
    file_storage = DefaultStorage()
    template_name = "patient/registration.html"
    form_list = [CustomUserCreationForm, CustomProfileCreateForm]
    instance = None

    def get_form_instance(self, step):
        if self.instance is None:
            self.instance = User()
        return self.instance

    def done(self, form_list, **kwargs):
        data = {}
        for form in form_list:
            data.update(**form.cleaned_data)
        if data.get('password1', None):
            data.update({'password': data['password1']})
            data.pop('password1')
            data.pop('password2')
        User.objects.create_user(**data)
        return redirect(reverse_lazy('account_login'))
于 2020-11-10T14:03:33.293 回答
0

用户密码使用用户模型的set_password方法设置。

password1password2字段不是User模型的字段,而是UserCreationForm字段。您应该调用CustomUserCreationForm 的save方法而不是用户的save方法。

为了更好地理解这一切是如何工作的,我建议你看一下UserCreationForm.save方法。

于 2020-11-10T10:46:55.180 回答