'formset not uploading pictures to the backend when user creates a new course?
When creating a new course all data in the formset get posted to the backend except the course cover image why is my formset not uploading the cover for a course, mean while i have added the field to OwnerCourseMixin and OwnerCourseEditMixin i see the cover field in my create formset, but it won't just save the cover image in my database.
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})
Solution 1:[1]
Well your problem comes from omitting enctype="multipart/form-data" from your form , add it and it would work now!
<form method="post" enctype="multipart/form-data">
...
...
</form>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
