Форум сайта python.su
Столкнулся с такой непонятной проблемой. В форме объявлен 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 ? 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
Офлайн
Спасибо большое! Помогло просто
self.fields['region'].choices = get_regions()
self.base_fields['choice'] = forms.ChoiceField(...choices=...)
Отредактировано (Сен. 22, 2009 19:23:12)
Офлайн
North Представь как на самом деле происходит заполнение choices у choice_field, оно происходит один раз при импорте модуля. Для работы с моделями есть такие варианты:
1) Если список всегда один и тот-же и берётся из базы:
choice_field = forms.ModelChoiceField(queryset=Queue.objects.all())
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)
Офлайн