如果我的模型看起来像:
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)
我的问题是:
select_related
或必须使用预取prefetch_related
?page_set
?这不起作用:Publisher.objects.all().prefetch_related('book_set', 'book_set_page_set')
假设我有以下模型
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用于prop
从bar
),因为只有一个prop
与之相关联bar
如果需要 3 次调用,有没有办法通过使用 selected_related for bar -> prop