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
Порядок расширения суперклассов имеет значение, поэтому UserPassesTestMixin должен быть раньше UpdateView:
class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
Я удивлен, что это не упоминается в документации для UserPassesTestMixin, но вы можете получить подсказку из LoginRequired:
Этот миксин должен находиться на самой левой позиции в списке наследования.
В качестве примечания вы можете просто сделать
return self.request.user == post.author
Поскольку это уже булево значение. Нет необходимости в предложении if.
