#django #django-forms #django-views
#django #django-forms #django-просмотры
Вопрос:
Итак, у меня есть форма с SelectWithPop. Таким образом, пользователь может выбрать переменную или добавить еще одну. Открыта новая страница, на которой пользователь может ввести данные.
Моя проблема в том, что я могу вставить новую переменную в модель, но когда я возвращаюсь на страницу, чтобы выбрать значение, новое значение не отображается, пока я не перезапущу сервер.
Является ли такое поведение нормальным или я сделал что-то не так?
Если это так, есть ли какой-нибудь способ преодолеть эту проблему?
Вот мои взгляды:
def add(request, field):
return handlePopAdd(request, HospitalForm, 'hospital_name')
def handlePopAdd(request, addForm, field):
if request.method == "POST":
form = addForm(request.POST)
if form.is_valid():
try:
newObject = form.save()
except forms.ValidationError, error:
newObject = None
if newObject:
return HttpResponseRedirect(reverse('form', args=['clinical']))
else:
form = addForm()
return render_to_response("popadd.html", { 'form': form })
формы:
class CheckPatForm(forms.Form):
pat = forms.IntegerField(label="Paciente")
_names = list(Hospital.objects.values_list('hospital_id', 'hospital_name'))
_names.append(('',''))
hosp = forms.ChoiceField(_names, widget=SelectWithPop(), label="Hospital", required=False)
proc = forms.IntegerField(label="Processo", required=False)
class HospitalForm(forms.ModelForm):
class Meta:
model = Hospital
шаблоны добавляют:
<a
href="/SIAM-TB/insert/form/add/{{ field }}"
class="add-another"
id="add_id_{{ field }}">
<img src="http://rome/SIAM-TB/admin_media/img/admin/icon_addlink.gif"
width="10" height="10" alt="Add Another"/>
</a>
Ответ №1:
поместите код, который получает набор запросов больницы, в инициализацию forms. например
....
hosp = forms.ChoiceField(widget=SelectWithPop(), label="Hospital", required=False)
def __init__(self, *args, **kwargs):
super(CheckPatForm, self).__init__(*args, **kwargs)
names = list(Hospital.objects.values_list('hospital_id', 'hospital_name'))
names.append(('',''))
self.fields['hosp'].choices = names