Форма Django не проверяется: «Выберите правильный вариант. 20 не является одним из доступных вариантов» - PullRequest
1 голос
/ 24 августа 2011

У меня есть форма, состоящая из 2 ChoiceField и CharField. Второе ChoiceField заполняется через ajax, когда выбран элемент первого.

Шаблон, заполняющий его, следующий:

{% for a in assets %}
<option value="{{ a.asset_id }}">{{ a.asset_name }}_{{ a.asset_description }}</option>
{% endfor %}

Когда я пытаюсь отправить форму, я получаю следующую ошибку:

Select a valid choice. 20 is not one of the available choices.

Указатель на второе поле ChoiceField, 20 соответствует {{a.asset_id}} выбранного элемента.

Я видел эту ошибку на других форумах, но это почти всегда из-за множественного выбора ChoiceField, который меня не касается.

Что я делаю не так?

1 Ответ

5 голосов
/ 24 августа 2011

Для ChoiceField нужно установить choices.Они не только определяют, что показано в раскрывающемся списке, но и важны для вас, они также определяют, какие значения следует принять при отправке формы.

Позвольте мне объяснить, что происходит в вашей ситуации.Ваш выбор изначально установлен как:

CHOICES = (
    ('', '-- choisir un type en premier')
)

Это означает, что будет принят только пустой выбор (первая запись в кортеже, '', является фактическим значением поля,и choisir... - текстовое значение).

Поэтому, когда вы добавляете <option> элементы через Javascript, их значения не будут в CHOICES, и поэтому они отклоняются Django, когда вы отправляетеэта форма.10 отсутствует в CHOICES.

Представление, в которое отправляется ваша форма, должно смотреть на значение переданного ей параметра, а затем соответственно изменять значение CHOICES, передаваемое в ChoiceField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...