多种形式的formset

时间:2014-07-24 07:09:44

标签: python django

好的我正在关注这个表格。我完全理解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>

1 个答案:

答案 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