Django MultipleChoiceField не отправляет корректные данные в POST
В моей форме django есть поле MultipleChoiceField
со списком кортежей в качестве опций.
choice = forms.MultipleChoiceField(
choices = [("1", "Option 1"), ("2", "Option 2"), ("3", "Option 3")],
label="Choose an option",
widget=forms.Select(),
required=True,
)
Это создает элемент DOM, когда он загружается
<select name="choice" id="id_choice">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
Однако, когда он отправляет POST-запрос на отправляемую форму, вместо того, чтобы дать
значение ("1", "Option 1")
, он просто отправляет "1"
. Таким образом, это вызывает ошибку ValidationError
в MultipleChoiceField
при проверке, так как в ней есть функция, которая требует, чтобы
чтобы значение POST было списком или кортежем.
def to_python(self, value):
if not value:
return []
elif not isinstance(value, (list, tuple)):
raise ValidationError(
self.error_messages["invalid_list"], code="invalid_list"
)
return [str(val) for val in value]
Есть ли способ установить POST-значение элемента DOM так, чтобы он отправлял этот кортеж?
Я попытался изменить его в функции views.py с помощью field.data
, но получил This QueryDict instance is immutable
Заранее спасибо.
Ошибка не должна возникнуть, причина, по которой он ожидает список, заключается в том, что он работает с .getlist(…)
[Django-doc] из данных, и потому что multiple в `MultipleChoiceField.
The reason it errors, is because you use a Select
widget [Django-doc], whereas it should be a SelectMultiple
widget [Django-doc], so:
choice = forms.MultipleChoiceField(
choices=[('1', 'Option 1'), ('2', 'Option 2'), ('3', 'Option 3')],
label='Choose an option',
widget=forms.SelectMultiple(),
required=True,
)