【发布时间】:2021-08-15 13:09:20
【问题描述】:
我似乎有一些示例说明如何在 Django 中以前向和后向关系 prefetch_related 字段,但如果我们想预取相关字段的所有字段,我怀疑如何应用型号。
例如,如果我想从以下模型中获取所有内容,请使用 HealthCheck 作为起点。哪个是实现这一目标的最优化查询?
class HealthCheck(models.Model):
id = models.Integer()
person = models.ForeignKey('Person')
class Person(models.Model):
profile = models.ForeignKey('Profile')
vaccines = models.ManyToManyField('vaccines', through='PersonVaccines')
class Profile(models.Model):
name = models.CharField(max_length=16)
class PersonVaccines(models.Model):
person = models.ForeignKey(Person)
vaccine = models.ForeignKey('Vaccine')
class Vaccine(models.Model):
name = models.CharField(max_length=16)
我尝试过类似的方法,但似乎不起作用:
from django.db.models import Prefetch
HealthCheck.objects.filter(id=1).prefetch_related(
Prefetch(
'person__vaccines',
queryset=PersonVaccines.objects.select_related('person', 'person__profile', 'vaccine')
)
)
如何预取所有相关内容?
【问题讨论】:
标签: django django-models prefetch django-select-related