所有kwargs字典都直接传递给表单字段的__init __()方法
def formfield(self, **kwargs):
# This is a fairly standard way to set up some defaults
# while letting the caller override them.
defaults = {'form_class': MyFormField}
defaults.update(kwargs)
return super(HandField, self).formfield(**defaults)
如果MyFormField是:
class GeopositionField(forms.MultiValueField):
def __init__(self, *args, **kwargs):
for name, value in kwargs.items(): # this doesn't print anything
print name
print value
self.widget = GeopositionWidget()
fields = (
forms.DecimalField(label=_('latitude')),
forms.DecimalField(label=_('longitude')),
)
super(GeopositionField, self).__init__(fields, required=False)
如何将参数传递到表单域并在 init 方法上获取?
答案 0 :(得分:0)
使用文档中的模式。创建字典并将其传递给超级formfield
方法。
class GeopositionField(forms.MultiValueField):
#...
def formfield(self, **kwargs):
# get the values you want to pass to init
defaults = {'your_kwarg_key': your_kwarg_value}
defaults['your_other_kwarg_key'] = your_other_kwarg_value
defaults.update(kwargs)
return super(HandField, self).formfield(**defaults)
我认为文档并不是说formfield
方法的结果传递给__init__
方法,我不能在源代码中看到它发生。
我认为文档只是说所有kwargs
都传递给__init__
(正如您所期望的那样),因此您可以通过传递form_class
参数来更改字段类__init__
- 但是,如果您想动态创建字段类,则可以覆盖formfield
方法。