假设我必须覆盖ModelForm
(在forms.py
中)以不同方式设置labels
或widgets
。即:
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__
答案 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
为什么采用这种方式?
我认为如果要覆盖许多属性,例如,通过定义新字段直接覆盖字段是很好的方法,例如required
,label
,widget