Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Django:Formset只保存第一个表单_Django_Forms_Formset - Fatal编程技术网

Django:Formset只保存第一个表单

Django:Formset只保存第一个表单,django,forms,formset,Django,Forms,Formset,我有一个表单集,允许上传多个带有描述的图像: def bilddokumentation_form(request, auftrag): auftrag = Auftrag.objects.get(id=auftrag) BilddokumentationFormSet = formset_factory(BilddokumentationForm, extra=1) formset = BilddokumentationFormSet(request.POST o

我有一个表单集,允许上传多个带有描述的图像:

def bilddokumentation_form(request, auftrag):

    auftrag = Auftrag.objects.get(id=auftrag)

    BilddokumentationFormSet = formset_factory(BilddokumentationForm, extra=1)

    formset = BilddokumentationFormSet(request.POST or None, request.FILES or None)
    if formset.is_valid():
        for form in formset.cleaned_data:
            name = form['name']
            bild = form['bild']
            Bilddokumentation.objects.create(
                name=name,
                bild=bild,
                auftrag=auftrag,
                user=request.META['USER'],
            )
    else:
        print(formset.errors)

    return render(request, 'auftragsverwaltung/bilddokumentation_add.html', {'item_forms': formset, 'auftrag': auftrag})
但只保存第一个表单。第二种形式不会出现在
已清理的\u数据中

这是模板:

<script type="text/html" id="item-template">
<div id="item-__prefix__">
    {{ item_forms.empty_form }}
</div>
</script>


<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ item_forms.management_form }}
<div id="items-form-container">
    {% for item_form in item_forms %}
        <div id="item-{{ forloop.counter0 }}">
            {{ item_form.id }}
            {{ item_form.as_p }}
        </div>
    {% endfor %}
</div>
<a href="#" id="add-item-button" class="btn btn-info add-item">weiteres Bild hinzufügen</a>
<input type="submit" class="btn btn-primary" value="Bilder hinzufügen">
</form>

<script>
$(document).ready(function() {
    $('.add-item').click(function(ev) {
        ev.preventDefault();
        var count = $('#items-form-container').children().length;
        var tmplMarkup = $('#item-template').html();
        var compiledTmpl = tmplMarkup.replace(/__prefix__/g, count);
        $('div#items-form-container').append(compiledTmpl);

        // update form count
        $('#id_item_items-TOTAL_FORMS').attr('value', count+1);

        // some animate to scroll to view our new form
        $('html, body').animate({
                scrollTop: $("#add-item-button").position().top-200
            }, 800);
    });
});
</script>
我可以看到第二个表单在
POST
数据中,但它不会出现在
cleaned\u数据中


正确的方法是什么?Django为什么要放弃第二个表单?

如果这是一个
ModelForm
为什么要使用
formset\u factory
而不是
modelformset\u factory
inlineformset\u factory
?有点离题:不是请求。META['USER']只使用request.users没有特别的原因-我试过modelformset\u factory,但结果是一样的。如果我通过JS添加另一个表单,它将只添加第一个表单-即使它在POSTCan中,您是否验证JS是否正确更新了
\id\u item\u items-TOTAL\u表单?POST数据中该字段的值是否正确?此外,您通常在每个生成的表单上迭代
formset.forms
并访问
cleaned_data
,而不是迭代
formset.cleaned_data
。这有用吗?
class BilddokumentationForm(ModelForm):

    class Meta:
        model = Bilddokumentation
        exclude = ['user', 'datum', 'auftrag']
        widgets = {
            'name': Textarea,
        }