У меня есть модель с 2 полями даты и времени, которая выглядит следующим образом:
class Booking(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField()
...
В качестве тестовых данных у меня есть 2 бронирования с start_date до 17:30 и 2 бронирования после 17:45, все на одномдень (8 мая 2018 года).Я пытаюсь отфильтровать заказы с помощью поиска __time, чтобы найти все заказы до (и в том числе) 17:30.Мой набор запросов:
bookings = Booking.objects.filter(date__time__lte=datetime.time())
Где datetime.time печатается как
datetime.time(17, 30)
и где часть даты даты и времени совпадает с датами бронирования.Приведенный выше запрос возвращает пустой набор запросов, но если я использую тот же запрос, за исключением фильтрации для времен, превышающих datetime.time (), т.е.
bookings = Booking.objects.filter(date__time__gte=datetime.time())
Набор запросов возвращает все заказы (где он должен возвращать только 2заказы с start_date после 17:30).Может кто-нибудь объяснить мне, как предполагается использовать поиск __time?
РЕДАКТИРОВАТЬ Я обновил фильтр до
bookings = Booking.objects.filter(start_date__time__lte=datetime.time())
, и результат тот же.Когда я печатаю значения бронирований, это:
print Booking.objects.all().values('date', 'end_date')
[
{'start_date': datetime.datetime(2018, 5, 8, 16, 30, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>), 'end_date': datetime.datetime(2018, 5, 8, 17, 0, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>)},
{'start_date': datetime.datetime(2018, 5, 8, 17, 0, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>), 'end_date': datetime.datetime(2018, 5, 8, 17, 30, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>)},
{'start_date': datetime.datetime(2018, 5, 8, 17, 45, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>), 'end_date': datetime.datetime(2018, 5, 8, 18, 15, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>)},
{'start_date': datetime.datetime(2018, 5, 8, 17, 45, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>), 'end_date': datetime.datetime(2018, 5, 8, 18, 15, tzinfo=<DstTzInfo 'Africa/Harare' CAT+2:00:00 STD>)}
]
РЕДАКТИРОВАТЬ 2 Я забыл упомянуть, что мне нужно получить заказы на ту же дату.Как предложил siddhant0905, вместо этого я отфильтровал набор запросов с указанием даты и времени и добавил дополнительный фильтр, чтобы убедиться, что он был в ту же дату.У меня сработало следующее:
bookings = Booking.objects.filter(Q(start_date__date=datetime.date()) & Q(start_date__lte=datetime))