Есть ли способ использовать и UserPassesTestMixin, и PermissionRequiredMixin?
Я пытаюсь создать модератора с использованием представлений на основе классов Django в моем приложении для блога. Он использует UserPassesTestMixin для предотвращения редактирования другими пользователями чужого контента.
То, что я пытаюсь реализовать, это группа под названием Manager, которая имеет права change_blog, и я использую PermissionsRequiredMixin в views.py
Вот мой код на данный момент
class UserAccessMixin(PermissionRequiredMixin):
def dispatch(self, request, *args, **kwargs):
if (not self.request.user.is_authenticated):
return redirect_to_login(self.request.get_full_path(), self.get_login_url(), self.get_redirect_field_name())
if not self.has_permission():
return redirect('/')
return super(UserAccessMixin, self).dispatch(request, *args, **kwargs)
class IssueUpdateView(LoginRequiredMixin, UserPassesTestMixin, UserAccessMixin, UpdateView):
raise_exception = False
permission_required = 'issues.change_issue'
model = Issue
fields = ['title', 'content', 'mark_as', 'assignee']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
def test_func(self):
issue = self.get_object()
if self.request.user == issue.author:
return True
return False
Когда я тестирую этот код в написанном виде, разрешения не работают и я получаю страницу с ошибкой 403, но все остальное функционирует нормально. Однако, если я удалю UserPassesTestMixin и оставлю PermissionRequiredMixin, все работает, но затем возникают новые проблемы. Оригинальный постер больше не может обновить свое сообщение, но когда пользователь мода обновляет сообщение, оно полностью перезаписывается, как если бы пользователь мода был оригинальным постером.
Есть ли способ подстроить UserPassesTestMixin или PermissionRequiredMixin с помощью AccessMixin, чтобы получить желаемую функциональность, или я должен просто использовать представления на основе функций?