Как создать проверку на класс DetailView? - PullRequest
0 голосов
/ 02 октября 2019

Я хочу, чтобы детали сообщения были видны только автору сообщения.

Это мой класс просмотра

class PostDetailView(PermissionRequiredMixin,DetailView):
    model = Post

Это мой класс формы

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

Это мой класс модели

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

Как я могу проверить (в моем представлении), является ли текущий пользователь автором сообщения?

Ответы [ 2 ]

1 голос
/ 02 октября 2019

вам придется использовать UserPassesTestMixin, чтобы проверить, является ли пользователь тем, кем он должен быть.

class PostDetailView(PermissionRequiredMixin, UserPassesTestMixin, DetailView):
    model = Post
    def test_func(self):
        return self.request.user.id == self.get_object().author_id

test_func должна быть функцией, которая возвращает True, если авторизованный пользователь разрешенпосмотреть содержание

0 голосов
/ 02 октября 2019

Вы можете написать собственное разрешение 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

Написание миксина поможет избежать повторения кода, когда вам нужно проверитьодно и то же разрешение в нескольких представлениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...