У меня есть многозначное поле с charfield и choicefield. Мне нужно передать выбор конструктору выбора, однако, когда я пытаюсь передать его в свое настраиваемое многозначное поле, я получаю сообщение об ошибке. __init__()
получил неожиданный аргумент аргументов ключевого слова.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 поле?
Edit:
Я попытался предложение stefanw, но до сих пор нет удачи. Я использовал logging.debug для распечатки содержимого InputAndChoiceField в конце init и self.fields [1] .choices содержит правильные значения, как указано выше, однако он не отображает никаких вариантов в браузере.
Я просто попробовал это, но я все равно получаю пустое поле выбора. Я проверил, и выбор прошел правильно, хотя. Есть предположения? –
Похоже, вы должны создать объект 'fields' перед вызовом конструктора MultiValueField, а затем передать это значение 'fields' в первый параметр contructor суперкласса. – mjumbewu