Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多表单的表单集_Python_Django - Fatal编程技术网

Python 多表单的表单集

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

好的,我在看表格。我基本上理解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

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:a
ModelForm
(和
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))