gpt4 book ai didi

django - 多个级别的 prefetch_related

转载 作者:行者123 更新时间:2023-11-28 19:36:49 24 4
gpt4 key购买 nike

如果我的模型看起来像:

class Publisher(models.Model):
pass

class Book(models.Model):
publisher = models.ForeignKey(Publisher)

class Page(models.Model):
book = models.ForeignKey(Book)

并且我想获取Publisher 的查询集,我使用Publisher.object.all()。如果然后想确保预取我可以这样做:

Publisher.objects.all().prefetch_related('book_set')`

我的问题是:

  1. 有没有办法使用 select_related 或我必须使用 prefetch_related 吗?
  2. 有没有办法预取页面设置?这不起作用:

Publisher.objects.all().prefetch_related('book_set', 'book_set_page_set')

最佳答案

从 Django 1.7 开始,django.db.models.Prefetch 类的实例可以用作 .prefetch_related 的参数。 Prefetch 对象构造函数有一个 queryset 参数,允许像这样指定嵌套的多级预取:

Project.objects.filter(
is_main_section=True
).select_related(
'project_group'
).prefetch_related(
Prefetch(
'project_group__project_set',
queryset=Project.objects.prefetch_related(
Prefetch(
'projectmember_set',
to_attr='projectmember_list'
)
),
to_attr='project_list'
)
)

因为我使用ListQuerySet处理预取结果(过滤/排序),所以存储在_list后缀的属性中。

关于django - 多个级别的 prefetch_related,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27116770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com