相关疑难解决方法(0)

prefetch_related用于多个级别

如果我的模型看起来像:

class Publisher(models.Model):
    pass

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

class Page(models.Model):
    book = models.ForeignKey(Book)
Run Code Online (Sandbox Code Playgroud)

我想得到Publisher我的查询集Publisher.object.all().如果那时想确保预取我可以做:

Publisher.objects.all().prefetch_related('book_set')`
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 有没有办法使用select_related或必须使用预取prefetch_related
  2. 有没有办法预取 page_set?这不起作用:

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

django django-orm django-queryset

29
推荐指数
2
解决办法
1万
查看次数

Django 链接 prefetch_related 和 select_related

假设我有以下模型

class Foo(models.Model):
    ...

class Prop(models.Model):
    ...

class Bar(models.Model):
    foo: models.ForeignKey(Foo, related_name='bars', ...)
    prop: models.ForeignKey(Prop, ...)
Run Code Online (Sandbox Code Playgroud)

现在我想进行以下查询。

foos = Foo.objects.prefetch_related('bars__prop').all()
Run Code Online (Sandbox Code Playgroud)

确实上述查询使得3级数据库的呼叫或仅2(select_related用于propbar),因为只有一个prop与之相关联bar

如果需要 3 次调用,有没有办法通过使用 selected_related for bar -> prop

django django-models prefetch

5
推荐指数
1
解决办法
2683
查看次数