Получение похожих объектов 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.