在Django中,我试图从ModelForm
形式派生(子类)一个新表单,我想删除一些字段(或者只有一些字段,更正确)。当然可以采用明显的方法(基本形式来自django.contrib.auth.forms
):
class MyUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
fields = ('first_name', 'last_name', 'email')
但这不起作用,因为它在结果表单中添加/保留username
字段。此字段已在UserChangeForm
中明确声明。即使将username
添加到exclude
属性也无济于事。
是否有一些正确的方法可以排除它而我错过了什么?这是一个错误吗?有一些解决方法吗?
答案 0 :(得分: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')
这会在创建表单时动态删除表单。
答案 1 :(得分: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]
但这对我来说闻起来像个臭虫。