我有一个“通用”InternForm
,它继承自ModelForm
并定义了常见的消息,小部件等。
我为每个人都可以访问的应用程序表单定义了一个名为ApplyInternForm
的子类,我想隐藏一些“高级”字段。
如何覆盖表单子类中的exclude
设置?
class InternForm(ModelForm):
# ...
class Meta:
model = Intern
exclude = ()
class ApplyInternForm(InternForm):
def __init__(self, *args, **kwargs):
super(ApplyInternForm, self).__init__(*args, **kwargs)
self.Meta.exclude = ('is_active',) # this doesn't work
答案 0 :(得分:3)
在子类中定义Meta
类对我有用:
class InternForm(ModelForm):
# ...
class Meta:
model = Intern
class ApplyInternForm(InternForm):
class Meta:
model = Intern
exclude = ('is_active',)
答案 1 :(得分:1)
不是这样,不。当您对表单进行子类化时,您要排除的字段已经存在。但是,您可以在self.fields
中致电super()
后将其从__init__()
移除。
答案 2 :(得分:-1)
您可以将小部件更改为隐藏:
class ApplyInternForm(InternForm):
class Meta:
widgets = {
'is_active': forms.HiddenInput(required=False),
}