Предварительная выборка по имени_родственника в детях по внешнему ключу django
Я пытаюсь получить связанные данные из родительской модели для детей через связанные имена, однако набор запросов в шаблоне все еще попадает в БД в PostgreSQL, моя модельB модельC и модельD все указывают на модельA, и когда я переписываю функцию набора запросов представления на основе общего класса, это все еще не влияет на размер запроса? Любые подсказки?
*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] делает не собирает ModelBs в same query, но в втором запросе, где он получает все связанные ModelB для выбранных (отфильтрованных) ModelA объектов оптом, это в контракте с получением его на ModelA объект, что было бы обычным поведением.
Для DetailView [Django-doc] это не даст никакого улучшения. В DetailView вы отображаете один элемент, и выборка связанных ModelB будет, независимо от того, делается ли это через .prefetch_related(…) или путем обращения к object.model_a_related.all(), делать один дополнительный запрос.