在Django中,我可以在ModelForm子类中排除一个字段吗?

时间:2011-09-27 11:50:05

标签: python django django-forms modelform django-1.3

我有一个“通用”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

3 个答案:

答案 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),
        }