好的我正在关注这个表格。我完全理解formset是多种形式的。
所以这个例子我只想要同时取四个值,但html中的输出只显示一个表格。
我想制作像<input id="your_name" type="text" name="your_name">
这样的额外档案,或者django会做其余的事情或其他任何方式来做这件事。?
models.py
class Article(models.Model):
title = models.CharField(max_length=100)
pub_date = models.DateField(auto_now_add=True)
forms.py
class ArticleForm(forms.Form):
title = forms.CharField()
#pub_date = forms.DateField()
ArticleFormSet = formset_factory(ArticleForm, extra=4, validate_max=True)
views.py
def book(request):
if request.method == 'POST':
formset = ArticleForm(request.POST)
if formset.is_valid():
new = Article()
new.title = request.POST.get('title', None)
#new.pub_date = request.POST.get('pub_date', None)
new.save()
return HttpResponseRedirect(reverse('firstapp.views.book'))
else:
formset = ArticleForm()
return render_to_response('get.html',{'formset': formset}, context_instance = RequestContext(request))
html看起来像这样
<form method="post" action="">
{% csrf_token %}
{{ formset.management_form }}
<table>
{% for form in formset %}
{{ form }}
{% endfor %}
</table>
<input type="submit"/>
</form>
答案 0 :(得分:1)
在您的视图中,您将formset
绑定到ArticleForm
,而不绑定到ArticleFormSet
。此外,您只需从中创建一个Article
,而您甚至没有正确使用form
(即:您直接从title
获取request.POST
从您的表单cleaned_data
获取它。您的视图代码看起来应该是这样的(警告:未经测试且可能有错误的代码,但至少您会得到图片)。
def book(request):
if request.method == 'POST':
formset = ArticleFormSet(request.POST)
if formset.is_valid():
for data in formset.cleaned_data:
Article.objects.create(title=data['title'])
return HttpResponseRedirect(reverse('firstapp.views.book'))
else:
formset = ArticleFormSet()
return render_to_response('get.html',{'formset': formset},
context_instance = RequestContext(request))
最后一点,我强烈建议您查看ModelForms
。