Django 1.11, python 2.7, postgresql
У меня есть набор моделей, которые выглядят так:
class Book(Model):
released_at=DateTimeField()
class BookPrice(Model):
price = DecimalField()
created_at = DateTimeField()
Предполагая наличие нескольких записей для Book и BookPrice (созданных в разные моменты времени), я хочу получить набор запросов Book
с аннотацией со значением BookPrice.price
, которое действовало на момент выпуска Книги. Что-то вроде:
books = Book.objects.annotate(
old_price=Subquery(BookPrice.objects.filter(
created_at__lt=OuterRef('released_at')
)
.order_by('created_at')
.last()
.price
)
)
Когда я пытаюсь что-то подобное, я получаю сообщение об ошибке: This queryset contains a reference to an outer query and may only be used in a subquery.
Я мог бы достаточно легко получить данные с помощью цикла for, но я пытаюсь подготовить большой кусок данных для загрузки в формате CSV, и я не хочу перебирать каждую книгу, если смогу помочь.