Получение похожих объектов Django в одном запросе, если между объектами нет прямой связи

Допустим, у меня есть следующая модель:

class Book(models.Model):
    class Meta:
      constraints = [
          models.UniqueConstraint(
              fields=["name", "version"],
              name="%(app_label)s_%(class)s_unique_name_version",
          )
      ]

    name = models.CharField(max_length=255)
    version = models.PositiveIntegerField()

Для каждой книги мне нужно получить все высшие версии:

book_to_future_book_mappings = {}
for book in Book.objects.all():
    higher_versions = Book.objects.filter(name=name, version__gt=book.version).order_by("version")
    book_to_future_book_mappings[book] = list(higher_versions)

Проблема этого подхода в том, что он плохо масштабируется. Он делает отдельный запрос для каждой книги, что очень медленно, если в моей базе данных миллионы книг.

Есть ли способ получить все эти данные с помощью нескольких запросов? Возможно, я могу использовать RawSQL при необходимости?

Обратите внимание, что моя база данных - PostgreSQL.

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