Я пытаюсь понять, как фильтровать QuerySet, используя дату, извлеченную из даты и времени.
Я использую Django-filter
и не могу составить такой поиск без перебора QuerySet, что очень неэффективно.
Я попробовал datetime__date__gte
, который не работает.
class MyReservationsFilter(FilterSet):
datetime__lte = DateFilter(method='datetime_filter',name='lte')
class Meta:
model = Reservation
fields = {'status': ['exact'],
# 'datetime': ['lte', 'gte'],
'destination_from': ['exact'],
'destination_to': ['exact'],}
def datetime_filter(self, queryset, name, value):
lookup = 'datetime__'+name
return queryset.filter(**{lookup:value})
Ты знаешь что делать?
Я не могу использовать datetime__lte/gte
, потому что:
У меня есть объект Reservation
r.
>> r.datetime
>> datetime.datetime(2017, 8, 31, 17, 55)
>> r.datetime.date()
>> datetime.date(2017, 8, 31)
Итак, теперь я пытаюсь фильтровать по дате:
Reservation.objects.filter(datetime__lte=datetime.date(2017, 8, 31),datetime__gte=datetime.date(2017, 8, 31))
>> []
Это потому, что он смотрит не только на дату, но и на время. Поэтому мне нужно извлечь дату, чтобы иметь возможность правильно фильтровать.