Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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 如何同时提交表单和表单集_Django_Django Forms_Formsets - Fatal编程技术网

Django 如何同时提交表单和表单集

Django 如何同时提交表单和表单集,django,django-forms,formsets,Django,Django Forms,Formsets,我试图同时呈现一个窗体和一个窗体集。 表单集工作正常(我认为),但表单没有验证(好像没有发布数据) 我试过使用这个按钮,但它的主要提交功能是通过js实现的 表单都是独立工作的,但在提交给etehr时却无法工作,因此问题似乎出在视图中 代码如下: views.py from django.shortcuts import render, render_to_response from django.http import HttpResponseRedirect from forms impor

我试图同时呈现一个窗体和一个窗体集。 表单集工作正常(我认为),但表单没有验证(好像没有发布数据)

我试过使用这个按钮,但它的主要提交功能是通过js实现的

表单都是独立工作的,但在提交给etehr时却无法工作,因此问题似乎出在视图中 代码如下:

views.py

from django.shortcuts import render, render_to_response
from django.http import HttpResponseRedirect
from forms import LessonForm, AddMaterialForm
from models import Lesson, SUBJECT_OPTIONS, Materials, MATERIAL_TYPES
from django.forms.formsets import formset_factory

def Create_Lesson(request):
    AddMaterials=formset_factory(AddMaterialForm, extra=9)
    if request.method == "POST": # If the form has been submitted...
        lesson = LessonForm(request.POST, prefix="lesson") # A form bound to the POST data
        formset = AddMaterials(request.POST, request.FILES) # A form bound to the POST data
        if lesson.is_valid() and formset.is_valid(): # All validation rules pass
            lesson = lesson.save(commit=False)
            lesson.creator = request.user
            lesson.save()
            for form in formset:
                form = form.save(commit=False)
                form.lesson = lesson.pk
                form.save()
            return render(request, 'index.html',)
    else:
        lesson= LessonForm(prefix='lesson') # An unbound form
        formset = AddMaterials()
    return render(request, 'create_lesson/create.html', {
    'form': lesson,'formset':formset
})
.html


1:创建您的课程
{{form.non_field_errors}}
主题
{{form.subject}}
{{form.subject.errors}
标题
{{form.name.errors}
你必须选择一个标题!
字幕
{{form.subtitle.errors}
是否确实要将子标题留空?
描述
{{form.success.errors}
您确定要将目标留空吗?
{{form.directions.errors}
您确定不想包括直选吗?
方向

您只需要一个表单标签。如果希望同时接收所有数据,则需要用一个表单标签包装所有字段。

这将同时提交表单和表单集

//When your uploading files or images don't forget to put "multipart/form-data" 
//   in your form. 
//To connect formset in your form, don't forget to put the model in the formset 
//   for instance.
//In this you can add many lines as you want or delete it.
forms.py

class LessonForm(forms.ModelForm):
    class Meta:
        model = Lesson


MaterialsFormset = inlineformset_factory(Lesson, Materials, 
    fields=('field_name', 'field_name'), can_delete=True)
def view_name(request):
    form = LessonForm()
    formset = MaterialsFormset(instance=Lesson())
    if request.method == 'POST':
        form = LessonForm(request.POST)
        if form.is_valid():
            lesson = form.save()
            formset = MaterialsFormset(request.POST, request.FILES,
                instance=lesson)
            if formset.is_valid():
                formset.save()
                return render(request, 'index.html',)
    return render(request, "page.html", {
        'form': form, 'formset': formset
    })
视图.py

class LessonForm(forms.ModelForm):
    class Meta:
        model = Lesson


MaterialsFormset = inlineformset_factory(Lesson, Materials, 
    fields=('field_name', 'field_name'), can_delete=True)
def view_name(request):
    form = LessonForm()
    formset = MaterialsFormset(instance=Lesson())
    if request.method == 'POST':
        form = LessonForm(request.POST)
        if form.is_valid():
            lesson = form.save()
            formset = MaterialsFormset(request.POST, request.FILES,
                instance=lesson)
            if formset.is_valid():
                formset.save()
                return render(request, 'index.html',)
    return render(request, "page.html", {
        'form': form, 'formset': formset
    })
html

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    {{ formset.as_p }}
    <input type="submit" value="Save"/>
</form>

{%csrf_令牌%}
{{form.as_p}}
{{formset.as_p}}

我刚试过,但还是不行。。。下一个答案中的方法似乎是。。。但是谢谢你仍然不需要两个单独的标签。这完全没有必要。如果不发布模型,就无法确定表单上的编码是否正确。如果这就是问题所在,你应该修改你的问题,使之更加准确。如果您注意到,您接受的答案只使用一个表单标签。谢谢。。。你是对的,我修正了,。。。但这还不够,我想主要的问题是我没有包括。。enctype=“多部分/表单数据”