[英]Override defaults attributes of a Django form
在我的Django应用程序中,我有几种不同的形式,它们的风格相似。 为了不重复自己,我尝试重写默认的表单设置。
首先,我想为我在我的应用程序中使用的每个表单设置一些默认设置,并尝试将django.forms.Form子类化 :
class DefaultForm(forms.Form):
error_css_class = 'alert'
error_class = DivErrorList
required_css_class = 'required'
label_suffix = ':'
auto_id = True
class TechnicalSurveyForm(DefaultForm):
location = forms.CharField(label='GPS Location')
satellite = forms.ModelChoiceField(queryset=get_satellites(), empty_label=None)
modem_sn = forms.CharField()
在我的views.py中,我会简单地使用表单
tsurvey = TechnicalSurveyForm()
不幸的是,我在DefaultForm中设置的设置不到位(当我使用TechnicalSurvey(auto_id = True, error_class = DivErrorList)
时)。 所以,我想我的方法在某种程度上是完全错误的。 有人可以帮帮我吗?
我想forms.Form
的__init__
初始化Form的属性。 在Django完成其工作之后,您需要覆盖__init__
方法并更改属性。
编辑:的确,在检查django源代码后,您可以看到表单对象的属性在__init__
函数中初始化。 该方法在django的github上可见 。
class DefaultForm(forms.Form):
def __init__(self, *args, **kwargs):
super(forms.Form, self ).__init__(*args, **kwargs)
self.error_css_class = 'alert'
self.error_class = DivErrorList
self.required_css_class = 'required'
self.label_suffix = ':'
self.auto_id = True
这种行为完全正常。 如果在init函数中也定义了在类声明中声明的每个具有相同名称的属性(如在作者示例中),则将覆盖它们。 这两种类型的属性声明之间略有不同 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.