我在一个名为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>
发布于 2015-04-29 05:50:20
您正在生成包含POST数据的表单(以保存它)。然后使用相同的POST数据呈现相同的表单集。这对于显示错误很有用,但在成功的情况下,这不是您想要的
标准模式是保存表单/表单集,(然后假定没有错误)重定向。在您的例子中,重定向到表单的GET版本。
在第一个"else“之前添加如下内容
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/')https://stackoverflow.com/questions/29919247
复制相似问题