Перезаполнение Django ChoiceField без перезапуска сервера - PullRequest
2 голосов
/ 25 октября 2011

У меня есть простая форма, в которой пользователи могут выбрать отдел из поля выбора.

Это моя форма:

class NewDealForm1(forms.Form):
        department = forms.ChoiceField(choices = map(lambda x:('%s'% x.id, '%s' % x.title),Department.objects.all()))

Всякий раз, когда я добавляю новый отдел из admin, поле выбора не отображаетсяне будет отображать новый отдел, если я не перезапущу свой сервер

Как отобразить все отделы без перезапуска сервера?

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

Ответ Вольфа верный.

Но чтобы ответить на ваш вопрос напрямую («Перезаполнение Django ChoiceField без перезапуска сервера»), вам нужно установить варианты в конструкторе форм.Вот пример динамического выбора года кредитной карты.

class NewDealForm1(forms.Form):
    year = forms.ChoiceField(choices=[]))

    def __init__(self, *args, **kwargs):
        super(NewDealForm, self).__init__(*args, **kwargs)
        year = datetime.date.today().year
        self.fields['year'].choices = [(x, x) for x in range(year, year+10)]
3 голосов
/ 25 октября 2011

Вместо использования forms.ChoiceField вы должны попробовать forms.ModelChoiceField, который напрямую принимает набор запросов.

Документы: https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield

Пример

class NewDealForm1(forms.Form):
    department = forms.ModelChoiceField(queryset=Department.objects.all()))
...