Example #1
0
 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())
Example #2
0
    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)
Example #3
0
    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)