(Идентификатор скрытого поля) Выберите правильный вариант. Этот выбор не является одним из доступных вариантов. (Django)
Я получаю эту ошибку, когда пытаюсь отправить два набора форм. После того, как я заполняю форму и нажимаю кнопку сохранения, возникает ошибка:
(Идентификатор скрытого поля) Выберите правильный выбор. Этот выбор не является одним из доступных вариантов.
Я пытаюсь создать динамическую форму, чтобы пользователь мог добавлять новые разделы, а также новые лекции внутри раздела, когда он нажимает кнопку "Добавить". Функция добавления новой формы работает хорошо, у меня только проблема с сохранением ее в базе данных.
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, нужен идентификатор секции из первого набора форм, поэтому в представлениях возникает два цикла. Кто-нибудь может помочь мне решить эту проблему. Я не уверен, как это исправить.
Я новичок в 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.