#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(),
)
Удачи!