У меня есть несколько примеров того, как поля prefetch_related в прямой и обратной связи в Django, но у меня есть сомнения относительно того, как это можно применить, если мы хотим предварительно выбрать все поля связанной модели.
Например, если я хочу получить весь контент из следующих моделей, используя 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')
)
)
Как я могу предварительно загрузить все связанное содержимое?