Фильтр забронированных встреч по рабочим часам
Рабочие часы (TimeField) хранятся для каждого дня по времени UTC.
Таблица рабочих часов
business = models.ForeignKey(Business)
day = models.CharField(max_length=10)
opening_time = models.TimeField()
closing_time = models.TimeField()
Таблица назначений
appointment_time = models.DateTimeField()
Я пытаюсь получить записи на конкретный день для хранимого диапазона рабочих часов (между временем открытия_времени и временем закрытия_времени). Вот запрос
appointments = models.Appointments.objects.filter(service_start_time__week_day=3, service_start_time__gte=datetime.utcnow(), service_start_time__time__range=(day_obj.opening_time, day_obj.closing_time))
Иногда opening_time
может быть больше, чем closing_time
. Вышеприведенный запрос не получает записей по этой причине.
Для 03:00 (открытие) индийское стандартное время по UTC равно 22:30, а 20:00 (закрытие) по UTC равно 14:30. В этом случае время открытия кажется больше, чем время закрытия. Запрос ничего не фильтрует, хотя встречи доступны. Как решить эту проблему?
В этом случае вам необходимо преобразовать входные данные из UTC в IST.
pip install pytz
для установки библиотеки pytz, которая пригодится, когда вы делаете что-то подобное .
now_utc = datetime.now(timezone('UTC'))
это даст вам текущее время utcnow_asia = now_utc.astimezone(timezone('Asia/Kolkata'))
это даст вам время IST для того же времени UTCappointments = models.Appointments.objects.filter(service_start_time__week_day=3, service_start_time__gte=now_asia, service_start_time__time__range=(day_obj.opening_time, day_obj.closing_time))
<--ваш запрос будет отложен в соответствии с требованиями фильтра, поэтому внесите соответствующие изменения .