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
相关产品推荐
相关产品推荐

