Python 多表单的表单集
好的,我在看表格。我基本上理解formset是用于多个表单的 所以这个例子我只想同时获取四个值,但是html中的输出只有一个表单 我应该像这样做额外的文件吗?Python 多表单的表单集,python,django,Python,Django,好的,我在看表格。我基本上理解formset是用于多个表单的 所以这个例子我只想同时获取四个值,但是html中的输出只有一个表单 我应该像这样做额外的文件吗?,或者django会做其余的或任何其他的方式来做 models.py class Article(models.Model): title = models.CharField(max_length=100) pub_date = models.DateField(auto_now_add=True) forms.py c
,或者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>
{%csrf_令牌%}
{{formset.management_form}
{formset%中表单的%s}
{{form}}
{%endfor%}
在您看来,您是将表单集
绑定到文章表单
,而不是绑定到文章表单集
。此外,您仅从中创建了一篇文章
,而且您甚至没有正确使用表单
(即:您直接从请求中获取标题
。POST
而不是从表单的数据中获取)。您的视图代码应该是这样的(注意:未经测试,可能有错误的代码,但至少您会了解情况)
最后,我强烈建议您看看ModelForms
Super。。正是我想要的。。!但是,如果我想上传图像文件或者我正在使用文件字段,那么我应该怎么做?@gello:aModelForm
(和ModelFormSet
)将处理您的图像/文件字段-假设它们是在模型上定义的,而不是从模型表单中删除的,并且您的(html)中设置了“多部分/表单数据”enctype表单标记并传递request.FILES
作为表单/表单集的第二个位置参数。
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))