Как применить фильтр на основе дат уже существующей базы данных с помощью Django Queryset

Итак, у меня есть следующий вывод QuerySet :

<QuerySet [{'price': 12.515, 'price_date': datetime.datetime(2017, 3, 13, 0, 0, tzinfo=)}, {'price': 12.335, 'price_date': datetime.datetime(2017, 3, 14, 0, 0, 0, tzinfo=)}, {'price': 12.37, 'price_date': datetime.datetime(2017, 3, 15, 0, 0, 0, tzinfo=)}, {'price': 12.35, 'price_date': datetime.datetime(2017, 3, 16, 0, 0, tzinfo=)}, {'price': 12.305, 'price_date': datetime.datetime(2017, 3, 17, 0, 0, 0, tzinfo=)}...

.

Как я могу получить, скажем, цену с price_date = 11-26-21 (26 ноября 2021 года)? Или если я хочу отфильтровать по последним 30 ценам?

Спасибо

Вы можете использовать в выражении фильтра либо объекты datetime, либо строки:

filter_date = datetime.now()
Product.objects.filter(price_date=filter_date)
Product.objects.filter(price_date__lte=filter_date)

# or
Product.objects.filter(price_date__lte="2021-11-27 20:00:00")
Product.objects.filter(price_date="2021-11-27")

Для последних 30 элементов вы упорядочите набор запросов в соответствии с обратным значением price_date, а затем возьмете первые 30 элементов.

Если у вас уже есть начальный QuerySet, вы все равно можете filter свои результаты.

Для извлечения цены используйте values_list

prices = qs.filter(price_date='2021-11-26').values_list('price', flat=True)
Вернуться на верх