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

#django #python-3.x

#django #python-3.x

Вопрос:

Как я могу перезапускать сервер Django каждый раз, когда я что-то менял в базе данных?

Итак, допустим, я выполнил Model.objects.update() в БД, как я могу заставить сервер Django автоматически перезапустить? Я использую выпадающий фильтр, и когда я обновляю значение с ’25’, скажем, до ’22’, выпадающий фильтр по-прежнему отображает ’25’, пока я вручную не перезапущу сервер. Как я могу это изменить?

Вот моя форма. Я использую django_filters для выпадающего фильтра.

 class CSVFilter(django_filters.FilterSet):
    entries = CSV5.objects.values_list('gebaeudebereich', flat = True).distinct()
    gebaeudebereich_auswahl = [(e, e) for e in entries]
    gebaeudebereich = django_filters.ChoiceFilter(choices = gebaeudebereich_auswahl, label="Gebäudebereich")

    entries = CSV5.objects.values_list('gebaeudenummer', flat=True).distinct()
    gebaeudenummer_auswahl = [(e, e) for e in entries]
    gebaeudenummer = django_filters.ChoiceFilter(choices=gebaeudenummer_auswahl, label="Gebäudenummer")

    entries = CSV5.objects.values_list('ebene', flat=True).distinct()
    ebene_auswahl = [(e, e) for e in entries]
    ebene = django_filters.ChoiceFilter(choices=ebene_auswahl)

    entries = CSV5.objects.values_list('raum', flat=True).distinct()
    raum_auswahl = [(e, e) for e in entries]
    raum = django_filters.ChoiceFilter(choices=raum_auswahl)
  

Комментарии:

1. Почему вы хотите это сделать?

2. Поскольку я использую выпадающий фильтр, и когда я обновил значение с ’25’, скажем, до ’22’, выпадающий фильтр по-прежнему отображает ’25’, пока я вручную не перезапущу сервер.

3. Тогда это проблема, которую вам нужно исправить. (Это яркий пример проблемы XY .) Вы, безусловно, делаете что-то не так в этой форме; пожалуйста, опубликуйте код формы.

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

5. Ну, проблема именно в вашем фильтре, потому что вы выполняете запросы на уровне класса, которые вы никогда не должны делать. Но это странный способ создания фильтра; что вы передаете при его создании? Все дело в том, что фильтр создает набор выпадающих списков на основе значений в заданном вами наборе запросов, вам не нужно указывать параметры вручную.

Ответ №1:

Формы и значения, которые отображаются в выпадающих списках, создаются только при запуске сервера. Вы, вероятно, не хотите перезапускать runserver , так как это не будет происходить с производственным веб-сервером.

Вместо этого вы захотите переопределить __init__ метод формы и установить там значения для выпадающего списка. Вот краткий пример:

 class MyForm(forms.form):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["my_field"] = forms.ModelChoiceField(
            queryset=MyModel.objects.all(),
        )
  

Удачи!