通过 related_name 在子外键 django 中预取
prefetch by related_name in children foreign key django
我正在尝试通过相关名称从父模型预取到子模型,但是模板中的查询集仍然命中 PostgreSQL 中的数据库,我的 modelB modelC 和 ModelD 都指向 modelA 并且当我覆盖通用class 基于视图queryset函数它仍然不影响查询的大小??有什么线索吗?
*MODEL
class ModelA(models.Model):
title = models.Charfield(max_lenght=200, null=True, Blank=True)
class ModelB(models.Model):
model_a = models.ForeignKey(ModelA, on_delete=models.CASCADE, related_name="model_a_related")
*VIEW
class ModelAView(DetailView):
model = ModelA
def get_queryset(self):
return super().get_queryset().prefetch_related('model_a_related')
.prefetch_related(…)
[Django-doc] not 在 same 查询中获取 ModelB
s,但在 second 查询在其中批量获取所选(过滤)ModelA
的所有相关 ModelB
,这与获取它的合同 per ModelA
对象这将是通常的行为。
对于DetailView
[Django-doc],因此不会有任何改善。在 DetailView
中,您呈现一个 单个 项目,并获取相关的 ModelB
s,无论它是通过 .prefetch_related(…)
还是通过访问 object.model_a_related.all()
进行 一个 额外查询。
我正在尝试通过相关名称从父模型预取到子模型,但是模板中的查询集仍然命中 PostgreSQL 中的数据库,我的 modelB modelC 和 ModelD 都指向 modelA 并且当我覆盖通用class 基于视图queryset函数它仍然不影响查询的大小??有什么线索吗?
*MODEL
class ModelA(models.Model):
title = models.Charfield(max_lenght=200, null=True, Blank=True)
class ModelB(models.Model):
model_a = models.ForeignKey(ModelA, on_delete=models.CASCADE, related_name="model_a_related")
*VIEW
class ModelAView(DetailView):
model = ModelA
def get_queryset(self):
return super().get_queryset().prefetch_related('model_a_related')
.prefetch_related(…)
[Django-doc] not 在 same 查询中获取 ModelB
s,但在 second 查询在其中批量获取所选(过滤)ModelA
的所有相关 ModelB
,这与获取它的合同 per ModelA
对象这将是通常的行为。
对于DetailView
[Django-doc],因此不会有任何改善。在 DetailView
中,您呈现一个 单个 项目,并获取相关的 ModelB
s,无论它是通过 .prefetch_related(…)
还是通过访问 object.model_a_related.all()
进行 一个 额外查询。