【发布时间】:2014-02-06 02:55:06
【问题描述】:
这是一个非基于模型的表单:
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
从非基于模型的视图中填充:
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 %}
页面显示得很漂亮,如果我在网页上发布没有任何更改,每个表单都会显示所有更改的字段(除了两个额外的返回空白)。
从此代码:
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']
[]
[]
【问题讨论】:
标签: django forms django-forms django-views formset