模板formset字段中的残余值与modelformset

时间:2015-04-28 12:16:20

标签: django django-models formset

我在名为spectacle的视图函数中使用了modelformset_factory和名为selection的对象。每个项目都会保存。但在那之后,页面被加载 与以前的项目。这种意想不到的行为。

我错过了什么?它是否与验证有关?

总结代码:

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>

1 个答案:

答案 0 :(得分:0)

您正在使用POST数据生成表单(以保存它)。 然后使用相同的POST数据呈现相同的formset。这对于显示错误非常有用,但如果成功,则不是您想要的

标准模式是保存表单/ formset,(然后假设没有错误)重定向。在您的情况下重定向到表单的GET版本。

在第一个“else”之前添加类似

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

然后它将运行相同的代码,但没有POST数据。或者,为成功页面添加不同的URL。

以下是docs中的示例(对于单个表单,但其原理相同): https://docs.djangoproject.com/en/1.8/topics/forms/#the-view

你错过了这一行:

        return HttpResponseRedirect('/thanks/')
相关问题