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

Django跨多外键关联查询:如何获取当前登录用户可访问的Bill对象

实现方案

首先你的模型定义存在缺失项:CustomerUser 到 Customer 的外键字段没有声明,和你提供的ER图对应不上,需要先补全该字段才能正常进行关联查询:

class CustomerUser(models.Model):
    first_name = models.CharField(max_length=30, blank=True, null=True)
    last_name = models.CharField(max_length=30, blank=True, null=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
    # 补全ER图中指向Customer的外键字段
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE, blank=True, null=True)

单条QuerySet查询代码

可以单条QuerySet实现需求,基于Django的双下划线跨关联查询语法,假设当前登录用户为request.user,查询语句如下:

# 基础查询
accessible_bills = Bill.objects.filter(customer__customeruser__user=request.user)

# 如果存在同一个Customer绑定多个同用户CustomerUser的场景,可加distinct去重
accessible_bills = Bill.objects.filter(customer__customeruser__user=request.user).distinct()

查询逻辑说明

  • customer__customeruser 表示从Bill表出发,通过外键关联到Customer表,再通过Customer到CustomerUser的反向外键关联到CustomerUser表
  • __user=request.user 表示筛选关联的CustomerUser绑定的用户等于当前登录用户的记录,最终返回符合条件的所有Bill对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:48:01