2

ユーザーが自分の User オブジェクトの属性 (first_name、last_name、および電子メール アドレス) を変更できるビューを作成したいと考えています。Django には、ユーザーを作成するための UserCreationForm が組み込まれています。email、first_name、last_name を含む拡張バージョンを既に持っています。今、パスワードとユーザー名を含めないように拡張しようとしています。

from django.contrib.auth.forms import UserCreationForm
class ExtendedUserCreationForm(UserCreationForm):
    class Meta:
        model = User
        fields = ('username', 'password1', 'password2', 
                  'email', "first_name", 'last_name' )

class UserEditForm(ExtendedUserCreationForm):
    class Meta:
        model = User
        exclude = ('username', 'password1', 'password2')

私が探している UserEditForm は、もちろん新しいインスタンスを作成することはできませんが、既存のインスタンスを編集するためにのみ使用されます。

form = UserEditForm(instance=request.user)

ただし、ユーザー名フィールドとパスワード フィールドは引き続き表示されます。これらを除外するにはどうすればよいですか?

4

4 に答える 4

5

次のように、フォームの init の password2 フィールドを削除するだけです。

class MyUserCreationForm(UserCreationForm):

    def __init__(self, *args, **kargs):
        super(MyUserCreationForm, self).__init__(*args, **kargs)
        del self.fields['password2']
于 2016-09-23T11:27:11.043 に答える
1

サブクラス化したクラスを見るのは悪い考えではありません。password1フィールドは、password2モデルではなくフォームで直接定義されます。したがってexcludefieldsそれらには何の影響もありません。ModelForm@MatthewSchinckel が提案するように、独自のものを作成してください。

于 2012-06-09T07:49:09.037 に答える
0

を使用してModelForm、不要なフィールドを除外しないのはなぜですか? それはより簡単な解決策になるようです。

于 2012-06-09T07:44:31.037 に答える