Повторное заполнение поля выбора Django без перезапуска сервера

#django #django-admin #django-forms

#django #django-администратор #django-формы

Вопрос:

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

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

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

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

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

Ответ №1:

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

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

Пример

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

Ответ №2:

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

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

 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)]