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,
)
Вернуться на верх