在帖子中返回的Django Formset中,所有表单都显示所有更改的字段,即使没有 [英] In a Django Formset being returned in a Post, all Forms are showing all fields changed even though none have
本文介绍了在帖子中返回的Django Formset中,所有表单都显示所有更改的字段,即使没有的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是基于模型的表单:
from django import forms
class MeasureForm(forms.Form):
name = forms.CharField(max_length=15)
description = forms.CharField(max_length=100)
datatype = forms.CharField(max_length=20)
uom = forms.Char
从基于非模型的视图填充:
Populated from a non-model based view:
def define_measures(request):
measureformset = formset_factory(MeasureForm, extra=2)
if request.method == 'POST': # If the form has been submitted...
formset = measureformset(request.POST ) # A form bound to the POST data
if formset.is_valid(): # All validation rules pass
for form in formset:
print form.changed_data
return HttpResponseRedirect('/viscas/measures') # Redirect after POST
else:
measures = cass.get_all_measures()
list_dict =[]
for measure in measures:
list_dict.append({'name': measure.name, 'description': measure.description, 'datatype': measure.datatype, 'uom': measure.uom})
formset = measureformset(initial=list_dict)
return render(request, 'viscas/measure.html', {
'formset': formset,
})
在模板中手动呈现:
{% extends "base.html" %}
{% block content %}
<body>
<div class="container">
<form action="{% url 'viscas:define_measures' %}" method="post">
{% csrf_token %}
<div>
<table class="table table-hover" name="poi" id="tagTable">
<thead>
<tr>
<th>UOM</th>
<th>Description</th>
<th>Datatype</th>
<th>UOM</th>
</tr>
</thead>
{% for form in formset %}
<tr>
<td>{{ form.name }}</td>
<td>{{ form.description }}</td>
<td>{{ form.datatype }}</td>
<td>{{ form.uom }}</td>
{% if form.errors %}
<tr>
<td>{{ form.errors }}</td>
</tr>{% endif %}
</tr>
{% endfor %}
</table>
{{ formset.management_form }}
</div>
<p></p><input type="submit" value="Submit"/></p>
</form>
</div>
</body>
{% endblock %}
页面显示精美,如果我在网页上没有任何更改的帖子,每种形式都显示所有更改的字段(除了两个额外的字段,它们又变回空白)。
The page displays beautifully, put if I post with no change whatsoever on the web-page, each form is showing all fields changed (except the two extra which come back blank).
此代码:
if request.method == 'POST': # If the form has been submitted...
formset = measureformset(request.POST ) # A form bound to the POST data
if formset.is_valid(): # All validation rules pass
for form in formset:
print form.changed_data
我得到以下输出:
['name', 'description', 'datatype', 'uom']
['name', 'description', 'datatype', 'uom']
['name', 'description', 'datatype', 'uom']
['name', 'description', 'datatype', 'uom']
['name', 'description', 'datatype', 'uom']
['name', 'description', 'datatype', 'uom']
['name', 'description', 'datatype', 'uom']
['name', 'description', 'datatype', 'uom']
['name', 'description', 'datatype', 'uom']
['name', 'description', 'datatype', 'uom']
[]
[]
推荐答案
我认为您的解决方案非常简单。只需在模板中的 {%for formset%}中的
{{formset.management_form}}
中添加模板即可。
I think your solution is rather simple. Just add {{ formset.management_form }}
above {% for form in formset %}
in your template. It's required to set up any formset in a template.
有关详细信息,请参见 Django表单集页面。
For more detail see the Django formset page.
这篇关于在帖子中返回的Django Formset中,所有表单都显示所有更改的字段,即使没有的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文