Подзапрос для возврата последнего внешнего ключа, который меньше даты - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть две модели, Ранг и Продукт. Ранг имеет внешний ключ продукта. Каждый день новый ранг создается для каждого продукта. Тем не менее, иногда происходит ошибка, и некоторые даты могут не иметь объекта 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')
...