Django配置LoginRequiredMixin等后仍无法限制非作者编辑帖子怎么解决?
问题根因
你遇到的权限校验不生效问题是由类继承顺序错误导致的:
Django的类视图Mixin执行逻辑遵循从左到右的继承顺序,权限校验类必须放在具体视图类的左侧,才能优先触发校验逻辑。你当前的继承顺序将UpdateView放在第一位,会跳过权限校验直接执行视图的更新逻辑,导致非作者也能编辑帖子。
修复方案
调整继承顺序即可,修正后的代码如下:
class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView): 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() return self.request.user == post.author
注:上述代码对
test_func的写法做了可选优化,直接返回判断结果即可,不需要额外的if分支,不修改原有写法也不影响功能。
如果调整顺序后仍然存在问题,可以额外排查两点:
Post模型的author字段是否是外键关联到系统的用户模型- 是否存在全局配置跳过了对应路径的权限校验规则
内容的提问来源于stack exchange,提问作者Wazy
相关产品推荐
相关产品推荐

