You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:09:04