У меня есть две модели, Ранг и Продукт. Ранг имеет внешний ключ продукта. Каждый день новый ранг создается для каждого продукта. Тем не менее, иногда происходит ошибка, и некоторые даты могут не иметь объекта Rank для Продукта. Поэтому я пытаюсь вернуть QuerySet, который получает самый последний объект Rank, меньший или равный date_str
для каждого объекта Product.
date_str
может быть любой произвольной датой. Если несколько продуктов не имеют объектов Rank с pub_date
, равным date_str
, этот набор запросов должен возвращать самый последний рейтинг в базе данных до date_str
.
Я думал, что эта функция будет работать, но она не работает возвращать что-либо вообще, когда точное совпадение для date_str
не найдено для каждого ранга каждого продукта.
date_str = '2020-04-27'
def get_queryset(self):
r = super().get_queryset().filter(pub_date__lte=self.date_str)
return r.filter(
pub_date=Subquery(
(Rank.objects
.filter(product=OuterRef('product'))
.values('product')
.annotate(last_updated=Max('pub_date'))
.values('last_updated')[:1]
)
)
).order_by('-day_rank')