вставил значение в модель с помощью SelectWithPop, но страница не обновляется, пока я не перезапущу сервер

#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