我有一个charfield和choicefield的多值域。我需要将选择传递给choicefield构造函数,但是当我尝试将其传递到我的自定义多值字段时,出现错误__init__()
得到了一个意外的关键字参数'choices'。Django MultiValueField - 如何将选项传递给ChoiceField?
我知道其余代码的作品,因为当我从__init__
和超级删除选项关键字参数时,多值字段显示正确,但没有任何选择。
这是怎么设置我的自定义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和self.fields [1]的末尾打印出InputAndChoiceField的内容。[1] .choices包含上述正确的值,但它不会在浏览器中显示任何选项。
我刚试过这个,但我仍然得到一个空的选择字段。我检查了,但选择正确通过。有什么想法吗? – 2009-10-24 09:45:20
它看起来应该在调用MultiValueField构造函数之前构造一个'fields'对象,然后将该'fields'值传递给超类构造函数的第一个参数。 – mjumbewu 2011-04-06 21:00:38