Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » ChoiceField - проблема с обновлением списка choices [RSS Feed]

#1 Сен. 22, 2009 12:02:20

North
От:
Зарегистрирован: 2008-09-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

ChoiceField - проблема с обновлением списка choices

Столкнулся с такой непонятной проблемой. В форме объявлен ChoiceField и choices формируется из содержимого модели. Но при добавлении в эту модель записи или удаления из нее - choices - не обновляется, будто бы кешируется на серврере. Пробовал и функцией и просто формировать тупл для параметра - не получается. В чем может быть дело - перепробовал уже все. Причем, в функцию создания тупла вставлял принт - он выполняется только при первом импорте формы (она лежит в отдельном .py файле в том же модуле что и view). Примеры, как делал:

def get_queues():
return tuple([('','-----')] + [(x.id, x.name) for x in Queue.objects.all()])


....
field = forms.ChoiceField(.... choices=get_queues())
....
field = forms.ChoiceField(.... choices=tuple([('','-----')] + [(x.id, x.name) for x in Queue.objects.all()]))
....
Функцию пробовал объявлять как метод внутри класса. ПРобовал с конструктром, но все равно - такое ощущение, будто создается объект формы только один раз и кешируется. Столько переделал проектов на Django - и совершенно не понятно в чем дело :(



Офлайн

#2 Сен. 22, 2009 13:15:24

smal
От:
Зарегистрирован: 2008-10-21
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

ChoiceField - проблема с обновлением списка choices

такой вопрос - как организован сервер Django ? development или связка с apache/nginx/…. ?

для создания списка из елементов модели для choice/select полей форм нужно использовать forms.ModelChoiceField() или forms.ModelMultipleChoiceField()

можна использовать такой вариант в класе форме

choice_field = forms.ChoiceField(choices=get_queues())

def __init__(self, *args, **kwargs):
super(YourFormClass, self).__init__(*args, **kwargs)
self.fields['choice_field'].widget.choices = get_queues()
self.fields['choice_field'].choices = self.fields['choice_field'].widget.choices



Офлайн

#3 Сен. 22, 2009 19:22:44

North
От:
Зарегистрирован: 2008-09-25
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

ChoiceField - проблема с обновлением списка choices

Спасибо большое! Помогло просто

 self.fields['region'].choices = get_regions()
Я пробовал такую конструкцию
self.base_fields['choice'] = forms.ChoiceField(...choices=...)
Но она также не работала.
Как я мог не попробовать такой вариант :/



Отредактировано (Сен. 22, 2009 19:23:12)

Офлайн

#4 Сен. 22, 2009 23:04:23

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

ChoiceField - проблема с обновлением списка choices

North Представь как на самом деле происходит заполнение choices у choice_field, оно происходит один раз при импорте модуля. Для работы с моделями есть такие варианты:
1) Если список всегда один и тот-же и берётся из базы:

choice_field = forms.ModelChoiceField(queryset=Queue.objects.all())
2) Если список ещё и меняется (если параметры запроса меняются), то так:
choice_field = forms.ModelChoiceField(queryset=Queue.objects.none())

def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields["choice_field"].queryset = Queue.objects.filter(some_field=some_value)



Офлайн

  • Начало
  • » Django
  • » ChoiceField - проблема с обновлением списка choices[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version