Dani MHM
Dani MHM

Reputation: 39

Django Improved UpdateView?

I have this UpDateView class and I need just author of article can edit the blog .I had the solution for the CreateView class(using def Form_valid) but it doesn't work for UpdateView class :::

class ArticleUpdateView(LoginRequiredMixin,UpdateView):
    model = models.Article
    template_name = 'article_edit.html'
    fields = ['title','body']
    login_url = 'login'

class ArticleCreateView(LoginRequiredMixin,CreateView):
    model = models.Article
    template_name = 'article_new.html'
    fields = ['title','body',]
    login_url='login'


    def form_valid(self,form):
        form.instance.author = self.request.user
        return super().form_valid(form)

Upvotes: 0

Views: 77

Answers (1)

wencakisa
wencakisa

Reputation: 5958

You can override the get_object method in your view class:

class ArticleUpdateView(LoginRequiredMixin,UpdateView):
    model = models.Article
    template_name = 'article_edit.html'
    fields = ['title','body']
    login_url = 'login'

    def get_object(self, *args, **kwargs):
        article = super().get_object(*args, **kwargs)

        if article.author != self.request.user:
            raise PermissionDenied('You should be the author of this article.')

        return article

Upvotes: 2

Related Questions