2

フィールドを動的に作成する MultiValueField に基づいてカスタム ウィジェットを作成しようとしています。次のようなもの:

class MyField(MultiValueField):
    def __init__(self, my_param, *args, **kwargs):
        fields = []
        for field in my_param.all():
            fields.append(forms.ChoiceField(
              widget=forms.Select(attrs={'class':'some_class'})))

    super(MyField, self).__init__(
        self, fields=tuple(fields), *args, **kwargs)

そして、このようなフィールドを使用するフォーム:

class MyForm(forms.Form):
    multi_field = MyField()
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['multi_field'].my_param = self.initial['car_types'].another

私は現時点でどういうわけか立ち往生しています。パラメータが MyForm のコンストラクタ (例: self.initial['car_types'].another) 内からしかわからない場合、パラメータ (例: my_param) を MyField のinit () メソッドに渡すにはどうすればよいですか?

4

1 に答える 1

3

内部でフィールドをインスタンス化する必要があります__init__

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['multi_field'] = MyField(self.initial['car_types'].another)
于 2013-09-16T14:50:53.807 に答える