Как разрешить доступ к странице обновления статьи только автору статьи в Django UpdateView?

Как разрешить доступ к странице обновления статьи только автору статьи в Django UpdateView?

#views.py
class ArticleUpdate(LoginRequiredMixin, UpdateView):
    model = Article
    template_name = 'articles/update_view.html'
    context_object_name = 'article_update'
    form_class = ArticleForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['securities_types_list'] = StocksETFsBonds.objects.all()
        context['tags_list'] = Tag.objects.annotate(articles_quantiy=Count('taggit_taggeditem_items')).order_by(
            '-articles_quantiy')[:10]
        return context

Выполните get_object и проверьте, является ли запрашивающий пользователь автором статьи (вы не предоставили детали ваших моделей, поэтому я предположу, что ваша модель Article имеет поле author):

class ArticleUpdate(LoginRequiredMixin, UpdateView):
    model = Article
    template_name = 'articles/update_view.html'
    context_object_name = 'article_update'
    form_class = ArticleForm

    def get_object(self, *args, **kwargs):
        obj = super().get_object(*args, **kwargs)
        if obj.author != self.request.user:
            raise PermissionDenied()
        return obj
        
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['securities_types_list'] = StocksETFsBonds.objects.all()
        context['tags_list'] = Tag.objects.annotate(articles_quantiy=Count('taggit_taggeditem_items')).order_by(
            '-articles_quantiy')[:10]
        return context

Вы также можете реализовать ArticleUpdate.get_queryset (если запрашивающий пользователь не является автором статьи, он получает ошибку 404):

def get_queryset(self, *args, **kwargs):
    return Article.objects.filter(author=self.request.user)
Вернуться на верх