10

コードを含めるように編集

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')

ユーザーがプロファイルの詳細を更新できるフォームがあります。

ユーザーはオプションで自分のプロファイルを更新できますpasswordsが、他のプロファイルフィールドを更新するために必須ではありません。

password問題は、フィールドとpassword confirmationフィールドが空白のときに検証が開始されることです。

私が信じるUserモデルフィールドはとフィールドなので、このモデルで検証するときにフォームからの空白の入力を単に無視する方法が必要です。Passwordrequired=Trueblank=False

このUserモデルは、Djangoに同梱されているモデルです。

from django.contrib.auth.models import User

ありがとう

4

2 に答える 2

14

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

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

シンプルなものを使用することをお勧めします

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') 

django.contrib.auth.forms.SetPasswordFormパスワードの変更には、ユーザー情報の更新とは異なるプロセスであるため、使用できる別の専用フォームがあります。

于 2012-12-18T15:11:44.600 に答える
0

独自のパスワード フォーム フィールドを作成し、手動で処理できます。または、clean メソッドをオーバーライドして、パスワード関連のエラーを自分で削除することもできます。

于 2012-12-18T15:05:11.617 に答える