@NyxDeveloper

Как получить все объекты связанные через ForignKey из QuerySet модели связанного объекта?

Возникла проблема со скоростью выполнения запросов к таблицам базы данных из-за сильной вложенности объектов.
Модели:
class Model1(models.Model):
    field = models.CharField(max_lenght=100)

class Model2(models.Model):
    field = models.ForignKey(Model1, 'model_1', related_name='model_1', on_delete=models.CASCADE)

class Model3(models.Model):
    field = models.ForignKey(Model2, 'model_2', related_name='model_2', on_delete=models.CASCADE)

Каким образом я могу получить QuerySet объектов Model3 связанных через объекты Model2 с объектами Model1. При этом не используя подобного:
Model3.objects.filter(model_2__model_1_id__in=Model1.objects.filter(.....).values('id'))

Данный запрос отрабатывает ужасно долго, даже на минимальном наборе данных. В официальной документации я нашел методы select_related и prefetch_related,но не совсем понял как они работают и не уверен что они вообще мне нужны. Подскажите правильное решение этой проблемы, я уверен, что оно легкое, просто не очевидное. Спасибо!
  • Вопрос задан
  • 342 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы