ORM Django составление запросов

Вопрос о порядке составления сложных запросов к БД на джанге. У меня есть три модели:

  • основная модель объекта, который имеет отношения к другим моделям

      class Res(models.Model):
         name = models.CharField(verbose_name='Наименование', max_length=20)
         related_rich = models.ForeignKey(Rich, on_delete=models.DO_NOTHING)
         related_registration = models.ForeignKey(Registration, on_delete=models.DO_NOTHING)
    
  • и две другие модели:

     сlass Rich(models.Model):
      name = models.CharField(max_length=30, verbose_name='Наименование', unique=True)
    
    
     class Registration(models.Model):
      name = models.CharField(max_length=30, verbose_name='Наименование', unique=True)
    

В проекте есть представления в виде списков по всем моделям. С первой моделью все более или менее понятно - чтобы вытащить связанные объекты мы просто выбираем команду select_related. То при выводе списка Rich мне недостаточно просто вывести prefetch_related('Res'), необходимо также вывести объекты Registration которые имеют отношение к связанным с Rich объектам Res. Подскажите каким образом необходимо составить корректный запрос к БД чтобы вытащить всю информацию одним запросом.

Вам необходимо сделать Prefetch

from django.dЬ.models import Prefetch

Rich.objects.all().prefetch_related(
   Prefetch('res_set', queryset=Res.objects.all().select_related('related_registration'))
)
Вернуться на верх