Я создаю форму для пользователя, чтобы выполнить запрос к базе данных.Модель называется Sample, и пользователь выбирает имена, которые он хочет включить в результаты запроса.В этом случае поле имени уникально, но другие поля, выполненные таким же образом, не являются.
Form.py
from django import forms
from .models import Sample
class SampleForm(forms.Form):
samples = Sample.objects.all()
names = [(s.id, s.name) for s in samples]
initial = [c[0] for c in names]
Rock_Names = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
choices=names,
initial=initial,
label='Name')
Проблема, с которой я столкнулся,после добавления нового образца форма не будет обновляться с этим именем, пока я не перезапущу сервер.У меня есть представление списка для всех образцов, и он обновляется с новым образцом в порядке.Я попытался запустить Sample.objects.update()
после сохранения нового образца, но это не помогло.Есть ли способ заставить это обновить?Есть ли лучший способ создать форму запроса?
Редактировать Хорошо, я подумал над этим и понял, что это более простая проблема объектно-ориентированного программирования.Форма создается с использованием атрибутов класса, определенных в определении класса (при перезапуске сервера), а не при создании экземпляра (при перезагрузке страницы).Я не думаю, что хочу перезапускать создание формы каждый раз при загрузке страницы (например, переход к атрибутам экземпляра в методе init), поэтому я переместил создание формы в функцию, которая вызывается при определении класса и через метод Iмогу позвонить, когда добавлю данные.Новый код выглядит так:
from django import forms
from .models import Sample
def create_form():
samples = Sample.objects.all()
names = [(s.id, s.name) for s in samples]
initial = [c[0] for c in names]
Rock_Names = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
choices=names,
initial=initial,
label='Name')
return Rock_Names
class SampleForm(forms.Form):
Rock_Names = create_form()
def update_form():
Rock_Names = create_form()