Предварительная выборка по имени_родственника в детях по внешнему ключу 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(), делать один дополнительный запрос.

Вернуться на верх