2013-03-18 39 views
1

的fromfield方法形成場按照documentationDjango中,將參數傳遞給從定製模型字段

所有字典被直接傳遞給表單字段的__init __的kwargs()方法

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) 

我怎麼會PA ss參數到formfield並獲取它init方法?

回答

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方法。

相關問題