(隐藏字段 id)Select 一个有效的选择。该选择不是可用选择之一。 (姜戈)
(Hidden field id) Select a valid choice. That choice is not one of the available choices. (Django)
我在尝试提交两个表单集时收到此错误。填写表格并单击保存按钮后,出现错误:
(隐藏字段 id)Select 一个有效的选择。该选项不是可用选项之一。
我正在尝试创建动态表单,以便用户在单击“添加”按钮时可以添加新部分以及该部分内的新讲座。添加新表单功能很好,我只是在将它保存到数据库时遇到问题。
Views.py
def addMaterials(request, pk):
course = Course.objects.get(id=pk)
sections = CourseSection.objects.filter(course_id=pk)
materials = CourseMaterial.objects.filter(section__in=sections)
SectionFormSet = modelformset_factory(CourseSection, form=SectionForm, extra=0)
sectionformset = SectionFormSet(request.POST or None, queryset=sections)
MaterialFormSet = modelformset_factory(CourseMaterial, form=MaterialForm, extra=0)
materialformset = MaterialFormSet(request.POST or None, queryset=materials)
context = {
'course': course,
'sectionformset': sectionformset,
'materialformset': materialformset,
}
if request.method == "POST":
if all([sectionformset.is_valid() and materialformset.is_valid()]):
for sectionform in sectionformset:
section = sectionform.save(commit=False)
section.course_id = course.id
section.save()
for materialform in materialformset:
material = materialform.save(commit=False)
print(material)
material.section_id = section #section.id or section.pk also doesn't work
material.save()
return('success')
return render(request, 'courses/add_materials.html', context)
Forms.py
class SectionForm(forms.ModelForm):
class Meta:
model = CourseSection
fields = ['section_name', ]
exclude = ('course_id', )
class MaterialForm(forms.ModelForm):
class Meta:
model = CourseMaterial
fields = ['lecture_name', 'contents']
第二个表单集是 materialformset,需要第一个表单集的部分 ID,因此视图中有两个循环。
有人可以帮我解决这个问题吗?我不确定如何修复它。
这就是我想要做的。
我是 django 的新手,但我不得不面对同样的问题。我的解决方案是单独处理 'views.py'.
中的每个表单集
在 template.html 中,为您拥有的每个表单集创建一个标签,然后在该标签内放置 <input type="submit" name="form1">
(请注意,名称很重要,并且必须与您使用的表单不同正在提交)。
然后在 views.py 中,而不是写 if all([sectionformset.is_valid() and materialformset.is_valid()])
,这样尝试:
if 'form1' in request.POST:
if sectionformset.is_valid():
sectionformset.save()
# other rows of your code
return('success')
if 'form2' in request.POST:
if materialformset.is_valid():
materialformset.save()
# etc. etc.
我在尝试提交两个表单集时收到此错误。填写表格并单击保存按钮后,出现错误:
(隐藏字段 id)Select 一个有效的选择。该选项不是可用选项之一。
我正在尝试创建动态表单,以便用户在单击“添加”按钮时可以添加新部分以及该部分内的新讲座。添加新表单功能很好,我只是在将它保存到数据库时遇到问题。
Views.py
def addMaterials(request, pk):
course = Course.objects.get(id=pk)
sections = CourseSection.objects.filter(course_id=pk)
materials = CourseMaterial.objects.filter(section__in=sections)
SectionFormSet = modelformset_factory(CourseSection, form=SectionForm, extra=0)
sectionformset = SectionFormSet(request.POST or None, queryset=sections)
MaterialFormSet = modelformset_factory(CourseMaterial, form=MaterialForm, extra=0)
materialformset = MaterialFormSet(request.POST or None, queryset=materials)
context = {
'course': course,
'sectionformset': sectionformset,
'materialformset': materialformset,
}
if request.method == "POST":
if all([sectionformset.is_valid() and materialformset.is_valid()]):
for sectionform in sectionformset:
section = sectionform.save(commit=False)
section.course_id = course.id
section.save()
for materialform in materialformset:
material = materialform.save(commit=False)
print(material)
material.section_id = section #section.id or section.pk also doesn't work
material.save()
return('success')
return render(request, 'courses/add_materials.html', context)
Forms.py
class SectionForm(forms.ModelForm):
class Meta:
model = CourseSection
fields = ['section_name', ]
exclude = ('course_id', )
class MaterialForm(forms.ModelForm):
class Meta:
model = CourseMaterial
fields = ['lecture_name', 'contents']
第二个表单集是 materialformset,需要第一个表单集的部分 ID,因此视图中有两个循环。 有人可以帮我解决这个问题吗?我不确定如何修复它。
这就是我想要做的。
我是 django 的新手,但我不得不面对同样的问题。我的解决方案是单独处理 'views.py'.
中的每个表单集在 template.html 中,为您拥有的每个表单集创建一个标签,然后在该标签内放置 <input type="submit" name="form1">
(请注意,名称很重要,并且必须与您使用的表单不同正在提交)。
然后在 views.py 中,而不是写 if all([sectionformset.is_valid() and materialformset.is_valid()])
,这样尝试:
if 'form1' in request.POST:
if sectionformset.is_valid():
sectionformset.save()
# other rows of your code
return('success')
if 'form2' in request.POST:
if materialformset.is_valid():
materialformset.save()
# etc. etc.