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
.