Formset не загружает изображения в бэкэнд, когда пользователь создает новый курс?
При создании нового курса все данные из набора форм попадают в бэкенд, кроме изображения обложки курса, почему мой набор форм не загружает обложку для курса, то есть, хотя я добавил поле в OwnerCourseMixin и OwnerCourseEditMixin, я вижу поле обложки в моем наборе форм, но оно не сохраняет изображение обложки в моей базе данных.
models.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)
cover = models.ImageField(upload_to="course_pictures", blank=True,null=True)
my view.py
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, LoginRequiredMixin):
model = Course
fields = ['subject', 'title', 'slug','overview','cover']
success_url = reverse_lazy('courses:manage_course_list')
class OwnerCourseEditMixin(OwnerCourseMixin):
fields = ['subject', 'title','slug', 'overview','cover']
success_url = reverse_lazy('courses:manage_course_list')
template_name = 'manage/module/formset.html'
class CourseCreateView(OwnerCourseEditMixin,
OwnerEditMixin,
CreateView,
PermissionRequiredMixin):
pass
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 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()
return self.render_to_response({'course':self.course,
'formset':formset,})
def post(self, request, *args, **kwargs):
formset = self.get_formset(data=request.POST,)
if formset.is_valid():
formset.save()
return redirect('courses:manage_course_list')
return self.render_to_response({'course': self.course,
'formset':formset})
Ваша проблема связана с отсутствием enctype="multipart/form-data" в вашей форме, добавьте его и она будет работать сейчас!
<form method="post" enctype="multipart/form-data">
...
...
</form>