Posiadam pole wielozadaniowości z charfield i polem wyboru. Muszę przekazać wybory konstruktorowi choicefield, jednak gdy próbuję go przekazać na moje niestandardowe pole multivaluefield, pojawia się błąd __init__()
otrzymuję nieoczekiwany argument słowa kluczowego "wybory".Django MultiValueField - Jak przekazywać wybory do ChoiceField?
Wiem, że reszta kodu działa, ponieważ po usunięciu argumentu słowa kluczowego wyboru z __init__
i super, pole multivaluefield wyświetla się poprawnie, ale bez możliwości wyboru.
ten sposób mogę skonfigurować mój zwyczaj 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)
A ja nazywam to tak:
input_and_choice = InputAndChoiceField(choices=[(1,'first'),(2,'second')])
Więc jak mam przekazać wyborów do mojej dziedzinie ChoiceField?
Edit:
Próbowałem sugestię stefanw, ale nadal nie ma szczęścia. Użyłem logging.debug do wydrukowania zawartości InputAndChoiceField na końcu init i self.fields [1] .choices zawiera poprawne wartości jak wyżej, jednak nie wyświetla żadnych opcji w przeglądarce.
Po prostu próbowałem, ale nadal mam puste pole wyboru. Sprawdziłem i opcje są jednak poprawnie przekazywane. jakieś pomysły? –
Wygląda na to, że powinieneś skonstruować obiekt 'fields' przed wywołaniem konstruktora MultiValueField, a następnie przekazać tę wartość 'fields' do pierwszego parametru contructor nadklasy. – mjumbewu