2

在 Django 中,我试图从ModelForm我想删除一些字段(或者只有一些字段,更正确)的表单派生(子类)一个新表单。当然明显的方法是这样做(基本形式来自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 回答