charfield と choicefield を持つ multivaluefield があります。選択肢を Choicefield コンストラクターに渡す必要がありますが、それをカスタムの複数値フィールドに渡そうとすると__init__()
、予期しないキーワード引数 'choices' が含まれているというエラーが発生します。
残りのコードが機能することはわかっています。なぜなら、choices キーワード引数を__init__
and super から削除すると、multivaluefield が正しく表示されますが、選択肢がないからです。
これは、カスタムの複数値フィールドをセットアップする方法です。
class InputAndChoice(object):
def __init__(self, text_val='', choice_val=''):
self.text_val=text_val
self.choice_val=choice_val
class InputAndChoiceWidget(widgets.MultiWidget):
def __init__(self, attrs=None):
widget = (widgets.TextInput(),
widgets.Select()
)
super(InputAndChoiceWidget, self).__init__(widget, attrs=attrs)
def decompress(self,value):
if value:
return [value.text_val, value.choice_val]
return [None, None]
class InputAndChoiceField(forms.MultiValueField):
widget = InputAndChoiceWidget
def __init__(self, required=True, widget=None, label=None, initial=None,
help_text=None, choices=None):
field = (
fields.CharField(),
fields.ChoiceField(choices=choices),
)
super(InputAndChoiceField, self).__init__(fields=field, widget=widget,
label=label, initial=initial, help_text=help_text, choices=choices)
そして、私はそれを次のように呼びます:
input_and_choice = InputAndChoiceField(choices=[(1,'first'),(2,'second')])
では、選択肢を ChoiceField フィールドに渡すにはどうすればよいでしょうか。
編集:
私はstefanwの提案を試みましたが、まだうまくいきません。私は logging.debug を使用して、init の最後に InputAndChoiceField の内容を出力しました。self.fields[1].choices には上記のように正しい値が含まれていますが、ブラウザには選択肢が表示されません。