Django ограничивает редактирование сообщений другими пользователями

У меня есть представление обновления, которое работает правильно. Единственная проблема заключается в том, что в настоящее время любой может редактировать любое сообщение. Для решения этой проблемы я реализовал LoginRequiredMixin и UserPassesTestMixin. Я считаю, что реализовал их правильно, но любой человек все еще может редактировать любое сообщение.

view:

class PostUpdateView(UpdateView, LoginRequiredMixin, UserPassesTestMixin):
    model = Post
    form_class = PostFormUpdate
    template_name = 'update_post.html'
   
    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False

enter image description here

Порядок расширения суперклассов имеет значение, поэтому UserPassesTestMixin должен быть раньше UpdateView:

class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):

Я удивлен, что это не упоминается в документации для UserPassesTestMixin, но вы можете получить подсказку из LoginRequired:

Этот миксин должен находиться на самой левой позиции в списке наследования.

В качестве примечания вы можете просто сделать

return self.request.user == post.author

Поскольку это уже булево значение. Нет необходимости в предложении if.

Вернуться на верх