2

ModelFormDjangoでは、いくつかのフィールドを削除したい(または、より正確にはいくつかのフィールドのみを使用したい)フォームから新しいフォームを派生(サブクラス化)しようとしています。もちろん、明らかな方法は次のようにすることです(基本形式はからですdjango.contrib.auth.forms):

class MyUserChangeForm(UserChangeForm):
  class Meta(UserChangeForm.Meta):
    fields = ('first_name', 'last_name', 'email')

usernameただし、結果のフォームにフィールドも追加/保持するため、これは機能しません。このフィールドはで明示的に宣言されましたUserChangeForm。属性に追加usernameexcludeても役に立ちません。

それを除外する適切な方法はありますか?何かが足りませんか?これはバグですか?いくつかの回避策はありますか?

4

2 に答える 2

3

これを試して:

class MyUserChangeForm(UserChangeForm):

  def __init__(self, *args, **kwargs):
    super(MyUserChangeForm, self).__init__(*args, **kwargs)
    self.fields.pop('username')

  class Meta(UserChangeForm.Meta):
    fields = ('first_name', 'last_name', 'email')

これにより、作成時にフォームからフィールドが動的に削除されます。

于 2010-07-20T08:00:36.833 に答える
1

(一般的な)回避策(まだexclude考慮に入れていない)は次のようです:

def __init__(self, *args, **kwargs):
  super(UserChangeForm, self).__init__(*args, **kwargs)
  for field in list(self.fields):
    if field not in self._meta.fields:
      del self.fields[field]

しかし、これは私にはバグのようなにおいがします。

于 2010-07-20T08:02:42.460 に答える