From 65f3305e823864ab566614040a1dd92ae7ee08b7 Mon Sep 17 00:00:00 2001 From: Dave Lowe Date: Tue, 1 Nov 2011 17:33:23 -0500 Subject: [PATCH] Delete posts via front-end * View (and url) for deleting posts * Refinements for PostForm to accept user on __init__ and set author by it --- biblion/forms.py | 12 +++++++----- biblion/urls.py | 1 + biblion/views.py | 41 ++++++++++++++++++++++++++++------------- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/biblion/forms.py b/biblion/forms.py index db7b5b1..5f0f7df 100644 --- a/biblion/forms.py +++ b/biblion/forms.py @@ -40,8 +40,8 @@ class PostForm(forms.ModelForm): ) publish = forms.BooleanField( required = False, - help_text = u"Checking this will publish this articles on the site", - ) + help_text = u"Checking this will publish this article on the site", + ) if can_tweet(): tweet = forms.BooleanField( @@ -51,11 +51,11 @@ class PostForm(forms.ModelForm): class Meta: model = Post - exclude = ("author",) def __init__(self, *args, **kwargs): blog = kwargs.pop("blog") + user = kwargs.pop("user") if "section" in kwargs: section = kwargs.pop("section") else: @@ -63,6 +63,9 @@ def __init__(self, *args, **kwargs): super(PostForm, self).__init__(*args, **kwargs) + self.fields["author"].initial = user + self.fields["author"].widget = forms.HiddenInput() + self.fields["section"].initial = section if not blog.sections.count(): del self.fields["section"] @@ -83,7 +86,7 @@ def __init__(self, *args, **kwargs): # from latest revision maybe? self.fields["publish"].initial = bool(post.published) - def save(self, user): + def save(self): post = super(PostForm, self).save(commit=False) if post.pk is None: @@ -99,7 +102,6 @@ def save(self, user): post.teaser_html = render_func(self.cleaned_data["teaser"]) post.content_html = render_func(self.cleaned_data["content"]) post.updated = datetime.now() - post.author = user post.save() r = Revision() diff --git a/biblion/urls.py b/biblion/urls.py index 5445e52..709cef2 100644 --- a/biblion/urls.py +++ b/biblion/urls.py @@ -12,4 +12,5 @@ url(r"^(?P[-\w]+)/$", "biblion.views.blog_section_list", name="blog_section"), url(r"post/add/$", "biblion.views.blog_post_add", name="blog_post_add"), url(r"^post/(?P\d+)/edit/$", "biblion.views.blog_post_edit", name="blog_post_edit"), + url(r"^post/(?P\d+)/delete/$", "biblion.views.blog_post_delete", name="blog_post_delete"), ) \ No newline at end of file diff --git a/biblion/views.py b/biblion/views.py index ae2870a..5f62fc9 100644 --- a/biblion/views.py +++ b/biblion/views.py @@ -38,7 +38,7 @@ class BlogCreate(CreateView): form_class = BlogForm -def blog_post_add(request, blog_slug, **kwargs): +def blog_post_add(request, blog_slug, post_form=PostForm, **kwargs): blog = get_object_or_404(Blog, slug=blog_slug) if "slug" in kwargs: @@ -47,17 +47,17 @@ def blog_post_add(request, blog_slug, **kwargs): section = None if request.method == "POST": - form = PostForm(request.POST, blog=blog, section=section) + form = post_form(request.POST, blog=blog, section=section, user=request.user) if form.is_valid(): - post = form.save(request.user) + post = form.save() if request.POST.get("next"): return HttpResponseRedirect(request.POST["next"]) - return HttpResponseRedirect("../%d" % post.pk) + return HttpResponseRedirect(post.get_absolute_url()) else: - form = PostForm(blog=blog, section=section) + form = post_form(blog=blog, section=section, user=request.user) image_form = ImageForm() @@ -67,7 +67,7 @@ def blog_post_add(request, blog_slug, **kwargs): }, context_instance=RequestContext(request)) -def blog_post_edit(request, blog_slug, post_pk, **kwargs): +def blog_post_edit(request, blog_slug, post_pk, post_form=PostForm, **kwargs): blog = get_object_or_404(Blog, slug=blog_slug) if "slug" in kwargs: @@ -78,9 +78,10 @@ def blog_post_edit(request, blog_slug, post_pk, **kwargs): post = get_object_or_404(blog.posts, pk=post_pk) if request.method == "POST": - form = PostForm(request.POST, instance=post, blog=blog, section=section) + + form = post_form(request.POST, instance=post, blog=blog, section=section, user=request.user) if form.is_valid(): - post = form.save(request.user) + post = form.save() if request.POST.get("next"): return HttpResponseRedirect(request.POST["next"]) @@ -88,7 +89,7 @@ def blog_post_edit(request, blog_slug, post_pk, **kwargs): return HttpResponseRedirect(post.get_absolute_url()) else: - form = PostForm(instance=post, blog=blog, section=section) + form = post_form(instance=post, blog=blog, section=section, user=request.user) image_form = ImageForm() @@ -99,6 +100,22 @@ def blog_post_edit(request, blog_slug, post_pk, **kwargs): }, context_instance=RequestContext(request)) +def blog_post_delete(request, blog_slug, post_pk, **kwargs): + + blog = get_object_or_404(Blog, slug=blog_slug) + + post = get_object_or_404(blog.posts, pk=post_pk) + + if request.method == "POST": + post.delete() + + return HttpResponseRedirect(request.POST.get("next") or "/") + + return render_to_response("biblion/blog_post_delete.html", { + "post": post, + }, context_instance=RequestContext(request)) + + def blog_image_upload(request, **kwargs): if request.method == "POST": @@ -139,10 +156,8 @@ def blog_post_detail(request, **kwargs): blog = get_object_or_404(Blog, slug=kwargs["blog_slug"]) if "post_pk" in kwargs: - if request.user.is_authenticated() and request.user.is_staff: - queryset = blog.posts.all() - post = get_object_or_404(queryset, pk=kwargs["post_pk"]) - else: + post = get_object_or_404(blog.posts, pk=kwargs["post_pk"]) + if not (request.user.is_authenticated() and request.user.is_staff) and post.author != request.user: raise Http404() else: queryset = blog.posts.current()