Как обрабатывать набор форм в представлении на основе функций
Я пытаюсь реализовать набор форм в функции create based view, чтобы позволить пользователям создавать свою собственную модель курса, почему-то, когда я пытаюсь отправить данные в базу данных, только данные модели курса отправляются в базу данных, а данные модуля не сохраняются в базе данных. почему функция create view не сохраняет данные, из моего модуля в базу данных модели и как лучше это сделать. Я знаю о решении с использованием class create view, но оно фактически не помогает в моем случае. и поэтому я думаю, что использование function create view будет гораздо более благоприятным для моего случая.
Здесь моя функция создает представление.
def course_create(request):
Formset = formset_factory(CreateCourse, extra=2)
if request.method =="POST":
formset_data = Formset(request.POST, request.FILES)
sub = request.POST.get('subject')
course = request.POST.get('title')
overview = request.POST.get('overview')
slug = request.POST.get('slug')
pic = request.FILES['c_pic']
owner = Account.objects.get(username=request.user.username)
sub,create = Subject.objects.get_or_create(title=sub)
data = Course(title=course,owner=owner,
pic=pic,
subject=sub,
slug = slug,
overview=overview)
data.save()
if formset_data.is_valid():
data = formset_data.save(commit=False)
data.course = data
formset_data.save()
return redirect('courses:main')
Вот мой Forms.py
class CreateCourse(forms.ModelForm):
class Meta:
model = Module
fields = ['title', 'description']
def save(self,commit=True):
module = super(CreateCourse, self).save(commit=False)
module.title = self.cleaned_data["title"]
module.description = self.cleaned_data['description']
if commit:
module.save()
return module
model.py
class Course(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL,\
related_name='courses_created', on_delete=models.CASCADE)
subject = models.ForeignKey(Subject,related_name='courses', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
pic = models.ImageField(upload_to="course_pictures")
slug = models.SlugField(max_length=200, unique=True,blank=True)
overview = models.TextField()
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
enroll = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='enrollment',blank=True)
class Meta:
ordering = ['-created']
def __str__(self):
return self.title
class WhatYouWillLearn(models.Model):
course = models.ForeignKey(Course,on_delete=models.CASCADE, related_name="higlighs")
hightlights = models.CharField(max_length=300, blank=True)
class Requirement(models.Model):
course = models.ForeignKey(Course,on_delete=models.CASCADE, related_name="require")
requirements = models.CharField(max_length=300, blank=True)
class Module(models.Model):
course = models.ForeignKey(Course, related_name='modules', \
on_delete=models.CASCADE,)
title = models.CharField(max_length=200)
description = models.TextField(blank=True)
order = OrderField(blank=True, for_fields=['course'])
class Meta:
ordering = ['course']
def __str__(self):
return '{}. {}'.format(self.order, self.title)
Вот представление модуля в базе данных.