заставить ChoiceField () принимать любое значение - PullRequest
0 голосов
/ 01 июля 2011

Я использую фреймворк форм и использую магию JavaScript, чтобы на лету ввести некоторые значения в поле выбора (значения этого поля выбора основаны на значении формы другого).

В основном у вас есть команда и игроки.Вам нужно определить игрока, но данные об игроках поступают из команды.

В моем классе формы у меня есть

team = forms.ModelChoiceField(queryset=Team.objects.all()
player = forms.ChoiceField()

Во внешнем интерфейсе, когда пользователь выбирает команду из спискаbox, (пустые) поля игроков корректно обновляются с новыми данными.Однако, когда я нажимаю «Отправить», окно выбора игрока выдает ошибку. Select a valid choice. 2 is not one of the available choices. 2 - это правильный выбор.

Есть ли способ обойти это?Могу ли я заставить ChoiceField () принимать любое значение?

Ответы [ 3 ]

3 голосов
/ 01 июля 2011

Упорядочено по сложности DESC:

  1. Заполните его всеми возможными вариантами. Например, если вы выберете идентификатор игрока, это будет choices = Player.objects.values_list('id', flat=True)
  2. Определите его как CharField, но визуализируйте его вручную в шаблоне как поле выбора.
  3. Не определяйте его в форме, но передавайте его значение конструктору формы (который необходимо переопределить для обработки этого значения).
2 голосов
/ 01 июля 2016

Вы можете определить поле как CharField с формами. Выберите в качестве виджета.Таким образом, поле отображается как пустой элемент выбора и принимает любое значение.

player = forms.CharField(widget=forms.Select)

это полезно, если вы используете Select2 и загружаете значения через ajax.

0 голосов
/ 01 июля 2011

Вы можете создать свой собственный ChoiceField, скажем, DynamicChoiceField, который выходит из ChoiceField.Затем вы можете переопределить «чистый» метод, чтобы не делать никакой проверки, как это было бы с обычным ChoiceField.

class DynamicChoiceField(forms.ChoiceField):     
    def clean(self, value):
        // Do whatever validation needs to happen

В форме вы можете использовать DynamicChoiceField вместо ChoiceField

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