首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django: prefetch_related的使用

Django: prefetch_related的使用
EN

Stack Overflow用户
提问于 2022-11-06 14:34:20
回答 1查看 31关注 0票数 1

我有一些这种关系的模型:

代码语言:javascript
复制
EmailReport --many-to-many--> PaymentReport --foreign-key--> Shop --many-to-many--> users

现在我想联系来自EmailReport的用户。我尝试了这个查询,但失败了:

代码语言:javascript
复制
query = models.EmailReport.objects.prefetch_related('payment_report').prefetch_related('shop__users').filter(pk__in=ids)

有人知道正确的查询吗?

更新:

由于@bartosz-stasiak,查询如下:

代码语言:javascript
复制
objects= EmailReport.objects.prefetch_related('payment_report__shop__users').filter(pk__in=ids)

但是我如何才能访问预字符用户呢?尝试过,但失败了:

代码语言:javascript
复制
objects= EmailReport.objects.prefetch_related('payment_report__shop__users').filter(pk__in=ids)
for object in objects:
   object.users.all()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-06 14:44:44

可能:

代码语言:javascript
复制
email_reports = EmailReport.objects.prefetch_related('payment_report__shop__users').filter(pk__in=ids)

(这是ids吗?用户ids还是EmailReport ids?)

这应该是最少数量的查询。请记住,您不能做进一步的过滤,否则它将破坏预取。

那么有几种方法可以得到用户。最简单的可能是:(但可能没有效率)

代码语言:javascript
复制
users_from_query = []
for email_report in email_reports:
    for pr in email_report.payment_report.all()
        users_from_query.extend(pr.shop.users.all())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74336791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档