1

根据文档

所有 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方法中获取?

4

1 回答 1

0

使用文档中的模式。创建字典并将其传递给 super 的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方法。

于 2013-03-18T07:39:47.510 回答