Django 如何同时提交表单和表单集
我试图同时呈现一个窗体和一个窗体集。 表单集工作正常(我认为),但表单没有验证(好像没有发布数据) 我试过使用这个按钮,但它的主要提交功能是通过js实现的 表单都是独立工作的,但在提交给etehr时却无法工作,因此问题似乎出在视图中 代码如下: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
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=“多部分/表单数据”