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

如何在Django类视图中限制合同仅对对应客户经理可见?

问题分析与修复

你的Contract视图过滤条件逻辑错误,导致无法正确限制可见范围。

错误原因

client__account_manager指向的是AccountManager模型的实例,而非User模型。你直接用self.request.user.id匹配AccountManager的主键,这显然不成立——AccountManager的主键是自身的id,和关联的User id没有直接对应关系。

正确的关联路径应该是:Contract → Client → AccountManager → account_manager(关联的User对象),需要通过双下划线穿透到最终的User字段进行匹配。

修复后的视图代码

class AMContractDetailView(LoginRequiredMixin, DetailView):
    model = Contract
    template_name = 'contracts/am_contract_detail.html'

    def get_queryset(self, *args, **kwargs):
        return (
            super()
            .get_queryset(*args, **kwargs)
            .filter(client__account_manager__account_manager=self.request.user)
        )

验证逻辑

这个过滤条件会按以下逻辑筛选:

  1. 从Contract找到关联的Client
  2. 从Client找到关联的AccountManager
  3. 从AccountManager找到关联的User,匹配当前登录的self.request.user

这样就能确保客户经理只能查看自己负责客户的合同。

内容的提问来源于stack exchange,提问作者watnalldt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:10:20