def form_valid(self, form): self.object = form.save(commit=False) self.object.slug = helpers.get_post_slug(self.object.title, self.request.user) self.object.owner = self.request.user self.object.save() return HttpResponseRedirect(self.get_success_url())
def post(self, request, *args, **kwargs): form_class = self.get_form_class() form = self.get_form(form_class) files = request.FILES.getlist("file") if form.is_valid(): for f in files: try: content = f.read().decode("utf-8") except (UnicodeDecodeError, ValueError): form.add_error("file", "File is not valid UTF-8.") return self.form_invalid(form) models.Post.objects.create( title=f.name, slug=helpers.get_post_slug(f.name, request.user), body=content, owner=request.user, published_at=None, ) return self.form_valid(form) else: return self.form_invalid(form)
def form_valid(self, form): # hidden code for slug: if slug is ":gen" then generate it from the title if form.cleaned_data.get("slug") == ":gen": self.object = form.save(commit=False) self.object.slug = helpers.get_post_slug( self.object.title, self.request.user ) self.object.owner = self.request.user self.object.save() return super().form_valid(form) # check if slug is unique among this user's posts if ( models.Post.objects.filter( owner=self.request.user, slug=form.cleaned_data.get("slug") ) .exclude(id=self.object.id) .exists() ): form.add_error("slug", "This slug is used by another of your posts.") return self.render_to_response(self.get_context_data(form=form)) self.object = form.save() return super().form_valid(form)