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

Django中prefetch_related使用:从EmailReport关联获取users的问题

问题:从EmailReport模型获取关联的users数据

模型关联关系

EmailReport --多对多---> PaymentReport --外键---> Shop --多对多---> users

初始查询尝试(失败)

尝试通过以下语句获取关联users,但执行失败:

query = models.EmailReport.objects.prefetch_related('payment_report').prefetch_related('shop__users').filter(pk__in=ids)

更新:正确的预取查询语句

感谢@bartosz-stasiak提供的正确预取语句:

objects = EmailReport.objects.prefetch_related('payment_report__shop__users').filter(pk__in=ids)

如何访问预取的users数据?

尝试直接调用object.users.all()失败,因为EmailReport与users没有直接关联,需要沿着关联链逐层访问:

错误尝试代码:

objects = EmailReport.objects.prefetch_related('payment_report__shop__users').filter(pk__in=ids)
for object in objects:
   object.users.all()

正确访问方式:

objects = EmailReport.objects.prefetch_related('payment_report__shop__users').filter(pk__in=ids)
for email_report in objects:
    # 遍历当前EmailReport关联的所有PaymentReport
    for payment_report in email_report.payment_report.all():
        # 获取PaymentReport对应的Shop
        shop = payment_report.shop
        # 访问Shop关联的users(已预取,无额外DB查询)
        for user in shop.users.all():
            # 处理用户数据,示例:打印用户名
            print(user.username)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:10:30