为已被覆盖的ModelForms设置'required = True'

时间:2013-01-04 16:24:16

标签: python django django-forms

假设我必须覆盖ModelForm(在forms.py中)以不同方式设置labelswidgets。即:

class SomeForm(ModelForm):
    def __init__(self,*args,**kwargs):
        super(someForm, self).__init__(*args, **kwargs)
            self.fields['someVal'].label = ...
            self.fields['someVal'].widget = ...

如何设置required=True

我知道我可以在__init__之前这样做:

class SomeForm(ModelForm):
    someVal = CharField(required=True)  # << here
    def __init__(self,*args,**kwargs):
        super(someForm, self).__init__(*args, **kwargs)
            self.fields['someVal'].label = ...
            self.fields['someVal'].widget = ...

但我正在做一些动态的东西,我想在__init__

中设置所需的内容

2 个答案:

答案 0 :(得分:2)

self.fields['someVal'].required = True

是的,它就像这一样简单:)你有相同的属性可用于你的字典中的类

答案 1 :(得分:2)

您需要覆盖表单中的字段。只需使用与模型中相同的字段名称:

class SomeForm(forms.ModelForm):
    field_a = forms.CharField(
        'My new label', max_length=30, required=True)  # << here

    def __init__(self,*args,**kwargs):
        super(someForm, self).__init__(*args, **kwargs)

    class Meta:
        model = MyModel

为什么采用这种方式?

我认为如果要覆盖许多属性,例如,通过定义新字段直接覆盖字段是很好的方法,例如requiredlabelwidget