Django: Формсеты не проходят валидацию из-за отсутствия данных
Я использую пакет django-formset-js (https://pypi.org/project/django-formset-js-improved/) для создания динамического набора форм. В нем задействованы три модели. Модель меню, которая имеет название и краткое описание. С моделью меню связаны несколько курсов. Они должны присоединяться динамически, так как количество курсов может меняться. При размещении запроса, на сайте, набор форм, не валидируется.
Я пытаюсь отладить код уже несколько дней и не могу найти ответ. request.POST возвращает значения.
request.POST
<QueryDict: {'csrfmiddlewaretoken': ['1kdujphIO3iawZZJuqSTYSds4vGT8er88s1GDpteNhAy20gTRdNRUTefXPSI
3Kjz'], 'menu_name': ['Mein zweites Menu'], 'menu_description': ['asfasdg'], 'status': ['a'], 'form-TOTAL_FORMS': ['2'], 'form-INITIAL_FORMS': ['1'], 'form-MIN_NUM_FORMS': ['0'], 'form-MAX_NUM_FORMS': ['1000'], 'form-1-course_name': ['B
igger'], 'form-1-course_description': ['asdfasdfasdfasdfasdf']}>
Но когда я печатаю course_formset.clean_data в консоль, он показывает пустоту и dict, а также жалуется, что набор форм не валидируется из-за отсутствия данных. далее ниже вы найдете model.py, form.py и html код.
Пожалуйста, помогите мне. Ты - моя единственная надежда
html
model.py
class Course(models.Model):
# Individual name of a course (i.e. "Natschis Spezial Fondue")
creator = models.ForeignKey(User, related_name='creator_id_course', on_delete=models.PROTECT)
course_name = models.CharField(max_length=100)
course_description = models.CharField(max_length=1000)
course_price = models.DecimalField(max_digits=7, decimal_places=2, null=True)
course_tags = models.ManyToManyField(CourseTag)
private = models.BooleanField(default=False, verbose_name=_('private item'))
active = models.BooleanField(default=True)
deleted = models.BooleanField(default=False)
objects = CourseManager()
def __str__(self):
return self.course_name
forms.py
class CourseForm(forms.ModelForm):
class Meta:
model = Course
fields = ['course_name', 'course_description']
class Media(object):
# todo: can this be deleted? used for
js = formset_media_js + (
# Other form media here
)
CourseFormset = modelformset_factory(Course,
form=CourseForm,
extra=0)
view.py def create_menu_with_courses(request): context = {}
# initializing forms
menu_form = MenuCreationForm(user, request.POST or None)
course_formset = CourseFormset(request.POST or None)
if request.method == 'POST':
current_user = request.user
if menu_form.
menu = menu_form.save(commit=False)
menu.creator = current_user
menu.save()
if course_formset.is_valid():
for position, course_form in enumerate(course_formset):
course = course_form.save(commit=False)
course.creator = request.user
course.save()