[Python] Django MultipleChoiceField not sending valid data in POST

Discussão em 'Python' iniciado por Stack, Dezembro 17, 2024.

  1. Stack

    Stack Membro Participativo

    My django form has a field MultipleChoiceField in with a list of tuples as the options.

    choice = forms.MultipleChoiceField(
    choices = [("1", "Option 1"), ("2", "Option 2"), ("3", "Option 3")],
    label="Choose an option",
    widget=forms.Select(),
    required=True,
    )


    This creates the DOM element when it is loaded

    <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>


    However, when it sends the POST request on the form being submitted, instead of giving a value ("1", "Option 1"), it just sends "1". As such, this triggers a ValidationError in the MultipleChoiceField when it is validated, as it has this function which requires the POST value to be a list or a tuple.

    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]


    Is there any way of setting the POST value of the DOM element so that it sends this tuple?

    I tried to change it in the views.py function using field.data, but got This QueryDict instance is immutable

    Thanks in advance.

    Continue reading...

Compartilhe esta Página