2015-04-28 3 views
0

Я использую modelformset_factory с объектом с именем selection в функции вида с названием зрелище. Каждый предмет сохраняется. Но после этого страница загружается с предыдущими пунктами. Такое непредвиденное поведение.Остаточные значения в полях шаблонов форм с помощью modelformset

Что я пропустил? Это что-то с проверкой?

Здесь суммируется вверх код:

from django.forms.models import modelformset_factory 

def spectacle(request, id_spectacle=0): 

selections_formset = modelformset_factory(Selection, fields=('nom',), extra=1) 
if request.method == 'POST': 
    formset = selections_formset(request.POST, request.FILES) 
    if formset.is_valid(): 
     for selection_form in formset: 
      selection_from_formset = selection_form.save(commit=False) 
      if selection_from_formset.nom != "" and selection_from_formset.nom is not None : 
       selection_from_formset.save() 
     message = 'success' 
     for fs in formset: 
      print fs.cleaned_data 
    else: 
     message = 'fail' 
    return render(request, 'create_spectacle.html', 
        {"formset": equipes_formset 
        }) 
else: 
    return render(request, 'create_spectacle.html', 
         {"formset": equipes_formset 
         }) 


<div id="my_form"> 
<form action="{% url 'create_spectacle' %}" method="post"> 
{% csrf_token %} 
{{ formset.management_form }} 
<div id="formsetZone"> 
    {% for form in formset %} 
     <div class="nformset_form"> 
      <h3>Equipe</h3> 
      {{ form.as_p }} 
     </div> 
    {% endfor %} 
</div> 
<input type="submit"/> 
</form> 

ответ

0

Вы генерируете форму с данными POST (для сохранения). Затем визуализация того же набора форм с теми же данными POST. Это полезно при отображении ошибок, но в случае успеха, а не то, что вы хотите

Стандартный шаблон - это сохранить форму/форму, (при условии отсутствия ошибок). в вашем случае переадресуйте на версию GET формы.

перед первым «еще» добавить что-то вроде

 return HttpResponseRedirect("add the url to your view here")  

Затем он будет работать один и тот же код, но без данных POST. Кроме того, добавьте другой URL-адрес на страницу успеха.

Вот пример в документации (для одной формы, но тот же принцип): https://docs.djangoproject.com/en/1.8/topics/forms/#the-view

Вы пропускаете строку:

 return HttpResponseRedirect('/thanks/') 
+0

Спасибо за напоминание, но хотя он работает с другими полями за пределами набора форм (что я не упомянул для упрощения), он не работает для набора форм. Перенаправление работает хорошо и генерирует запрос на получение, но поля форм заполняются заполненными повторяющимися значениями. Кажется, что-то связано со второй строкой: selections_formset = modelformset_factory (Selection, fields = ('nom',), extra = 1) – Proph73