(隐藏字段 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.