在Django中更新配置文件时,在User模型上允许空白密码字段

Ash*_*Ash 9 django django-forms

编辑包含代码

class UserForm(UserCreationForm):

    def __init__(self, *arg, **kw):
        super(UserForm, self).__init__(*arg, **kw)

        # re-order so email appears last on this form
        email_field = self.fields.pop('email')
        self.fields['email'] = email_field


    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username', 'email')
Run Code Online (Sandbox Code Playgroud)

我有一个表单用户可以更新他们的个人资料详细信息.

用户可以选择更新他们,passwords但不需要更新其他配置文件字段.

问题是我的验证在当踢passwordpassword confirmation字段为空.

User车型Password领域,我相信是一个required=Trueblank=False领域,所以我需要在这个模型验证时,简单地从形式忽略空白的输入方式.

User模型是随Django一起提供的模型:

from django.contrib.auth.models import User

谢谢

Ana*_*ass 13

UserCreationForm旨在用于创作.创建一个新的ModelForm比使用这个更好.

class UserUpdateForm(forms.ModelForm):
    # Feel free to add the password validation field as on UserCreationForm
    password = forms.CharField(required=False, widget=forms.PasswordInput)

    class Meta:
        model = User
        # Add all the fields you want a user to change
        fields = ('first_name', 'last_name', 'username', 'email', 'password') 

    def save(self, commit=True):
        user = super(UserUpdateForm, self).save(commit=False)
        password = self.cleaned_data["password"]
        if password:
            user.set_password(password)
        if commit:
            user.save()
        return user
Run Code Online (Sandbox Code Playgroud)

或者,如果你想要UserCreationForm我不推荐的子类.你可以这样做 :

class UserForm(UserCreationForm):
    password1 = forms.CharField(label=_("Password"), required=False
                            widget=forms.PasswordInput)
    password2 = forms.CharField(label=_("Password confirmation"),
                            widget=forms.PasswordInput, required=False)
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username', 'email')

    def save(self, commit=True):
        user = super(UserUpdateForm, self).save(commit=False)
        password = self.cleaned_data["password"]
        if password:
            user.set_password(password)
        if commit:
            user.save()
        return user
Run Code Online (Sandbox Code Playgroud)

我建议你用一个简单的

class UserUpdateForm(forms.ModelForm):       
    class Meta:
        model = User
        # Add all the fields you want a user to change
        fields = ('first_name', 'last_name', 'username', 'email') 
Run Code Online (Sandbox Code Playgroud)

对于密码更改,您可以使用另一种专用表单,django.contrib.auth.forms.SetPasswordForm因为更改密码与更新用户信息的过程不同