django - динамическое выделение полей в формах - PullRequest
3 голосов
/ 25 мая 2011

У меня есть модель, которая называется picks, которая позволяет пользователям выбирать команду nfl (из статического списка).Всякий раз, когда они выбирают команду, они больше не могут выбирать эту команду снова, поэтому выбор выбора уменьшается для любых выбранных ими команд.
У меня есть функция, которую я вызываю, на мой взгляд, которая определяет, какие команды они не выбрали.пока, но я не могу понять, как передать эту информацию в форму.Я просмотрел много примеров форм в Интернете, но на самом деле не нашел такого, который показывает, как этого добиться.Из того, что я прочитал, кажется, что я должен вызывать эту функцию из файла forms.py, но функция требует, чтобы в качестве параметров были переданы идентификатор пользователя и идентификатор лиги, поэтому я бы предпочел просто сделать это в модели.Может кто-нибудь объяснить или указать мне объяснение, показывающее, как передать выбор полей в модели из формы в форму?

Я относительно новичок в Django и Python, поэтому прошу прощения за любые очевидные упущенияделая здесь.

Спасибо!

РЕДАКТИРОВАТЬ

Хорошо, я думаю, что, возможно, я дал слишком много несущественной информации по этому вопросу, яПопробую упростить вопрос здесь:

У меня есть представление, которое создает форму.В форме есть поле выбора.Я рассчитываю параметры, которые должны идти в поле выбора внутри представления, основываясь на текущем пользователе и переменной в URL, который запустил представление.Я хотел бы знать, как передать опции выбора в форму, или если это не так, как это должно быть достигнуто.

В данный момент у меня нет кода для публикации, но я действительно не думаю, что он имеет отношение к проблеме.Надеюсь, я сделал его достаточно общим.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2012

Вы можете сначала определить свою форму без динамического поля.ПОСЛЕ создания экземпляра этого в вашем представлении, вы можете добавить поле динамического выбора, набрав

form_instance.fields['your_field'] = ChoiceField(choices=list_of_two_tuples)

или использовать ModelChoiceField и ввести что-то вроде

form_instance.fields['your_field'] = ModelChoiceField(queryset=Teams.filter(...))

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

0 голосов
/ 25 мая 2011

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

Предполагая, что у вас есть отношения между Team и User, выполнитеследующие (на ваш взгляд)

form.fields['team'].queryset = Teams.objects.exclude(selected_by_user = user.id)

помнят одну вещь:

Teams.objects.exclude(selected_by_user = user.id, date = datetime(2008, 12, 31))

будет соответствовать командам, которые не выбраны пользователями AND не от 31/12/2008, а

Teams.objects.exclude(selected_by_user = user.id,).exclude(date = datetime(2008, 12, 31))

будет соответствовать командам, которые не были выбраны пользователем ИЛИ с даты 31.12.2008.

Ссылки: Django Querysets (исключить фильтр)

...