Вы можете написать собственное разрешение mixin. Простой пример:
# mixins.py
from django.shortcuts import get_object_or_404, redirect
from your_app.models import Post
class PostCreatorRequiredMixin:
def dispatch(self, request, *args, **kwargs):
post = get_object_or_404(Post, pk=kwargs['pk']) # Assuming your url uses the the parameter name `pk` which is used by DetailView by default.
if post.author != request.user:
return redirect('user_is_not_the_post_owner.html')
return super().dispatch(request, *args, **kwargs)
А затем в вашем views.py
используйте его для проверки прав доступа:
from mixins import PostCreatorRequiredMixin
class PostDetailView(PermissionRequiredMixin, PostCreatorRequiredMixin, DetailView):
model = Post
Написание миксина поможет избежать повторения кода, когда вам нужно проверитьодно и то же разрешение в нескольких представлениях.