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

ドキュメントのパターンを使用します。辞書を作成し、スーパーの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 に答える