Formset 没有提交上传的图片?

Formset not submitting uploaded picture?

我希望允许用户在我的应用程序上创建课程,目前在用户创建新课程时上传课程封面(图片)时遇到挑战,当课程创建时课程的所有字段除图片数据外,详细信息已提交到数据库,为什么图片未提交,请有人帮助我。因为这对我来说是过去一周的挑战!

This is my view to create a new course!.

class OwnerMixin(object):
    def get_queryset(self):
        qs = super(OwnerMixin, self).get_queryset()
        return qs.filter(owner=self.request.user)


class OwnerEditMixin(object):
    def form_valid(self, form):
        form.instance.owner = self.request.user 
        return super(OwnerEditMixin, self).form_valid(form)


class OwnerCourseMixin(OwnerMixin):
    model = Course 
    fields = ['subject', 'title', 'slug','overview','pic']
    success_url = reverse_lazy('courses:manage_course_list')
    
    
class OwnerCourseEditMixin(OwnerCourseMixin):
    fields = ['subject', 'title','slug', 'overview','pic']
    success_url = reverse_lazy('courses:manage_course_list')
    template_name = 'manage/module/formset.html'
    
   


class ManageCourseListView(OwnerCourseMixin,ListView):
    template_name ='courses/course_list.html'


class CourseCreateView(OwnerCourseEditMixin,OwnerEditMixin,CreateView,):
    pass
    permission_required = 'courses.add_course'


class CourseModuleUpdateView(TemplateResponseMixin, View):
    template_name = 'manage/module/formset.html'
    course = None 
    
    def get_formset(self, data=None,):
        return ModuleFormSet(instance=self.course,data=data,)
    
    def get_form(self, data=None):
        return RequirementFormset(instance=self.course,data=data)
    
    def get_forms(self, data=None):
        return WhatYouWillLearnFormset(instance=self.course,data=data)
    
    def dispatch(self, request, pk):
        self.course = get_object_or_404(Course,id=pk,owner=request.user)
        return super(CourseModuleUpdateView, self).dispatch(request, pk)
    
    def get(self, request, *args, **kwargs):
        formset = self.get_formset()
        form = self.get_form()
        forms = self.get_forms()
        return self.render_to_response({'course':self.course,
                                        'formset':formset,'form':form,'forms':forms,})

    
    def post(self, request, *args, **kwargs):
        formset = self.get_formset(data=request.POST,)
        form = self.get_form(data=request.POST,)
        forms = self.get_forms(data=request.POST,)
       
        
        if formset.is_valid():
            formset.save()
        if form.is_valid():
            form.save()
        if forms.is_valid():
            forms.save()
            return redirect('courses:manage_course_list')
        
        return self.render_to_response({'course': self.course,
                                        'formset':formset,})

这是我的模型,我正在使用 formset 创建课程,而且

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", blank=True,null=True)
    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)
    students = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='courses_joined',blank=True)

    class Meta:
        ordering = ['-created']
    
    def __str__(self):
        return self.title

这是我的表单集

class CourseForm(forms.ModelForm):
        class Meta:
                model = Course
                fields = ['pic']


ModuleFormSet = inlineformset_factory(Course,
                                      Module,
                                      fields=['title','description',],
                                       extra=2,
                                       can_delete=True)

RequirementFormset = inlineformset_factory(Course,
                                           Requirement, 
                                           fields=['requirements'],
                                           extra=4,can_delete=True)

WhatYouWillLearnFormset = inlineformset_factory(Course,
                                                WhatYouWillLearn,
                                                fields=['hightlights'],
                                                extra=4,can_delete=True)

我认为模板文件的 form 标记中缺少属性 enctype="multipart/form-data"

<form method="post" enctype="multipart/form-data">
    ...
    ...
</form>