Django TimeField сохраняется с неправильным часовым поясом

У меня есть простая модель группы:

class Group(models.Model):
   leader = models.ForeignKey(User, on_delete=models.CASCADE)
   name = models.CharField(max_length=55)
   description = models.TextField()
   joined = models.ManyToManyField(User, blank=True)
   start_time = models.TimeField(null=True)
   end_time = models.TimeField(null=True)
   email_list = ArrayField(
        models.CharField(max_length=255, blank=True),
        blank=True,
        default=list,
    )
    DAYS = [
        ('Sundays', 'Sundays'),
        ('Mondays', 'Mondays'),
        ('Tuesdays', 'Tuesdays'),
        ('Wednesdays', 'Wednesdays'),
        ('Thursdays', 'Thursdays'),
        ('Fridays', 'Fridays'),
        ('Saturdays', 'Saturday7'),
    ]
    meeting_day = MultiSelectField(
        verbose_name = 'Meeting day(s)',
        choices=DAYS,
        max_choices=7,
        max_length=255
    )

Когда пользователи создают группу, они должны выбрать время начала. У меня есть периодическая задача celery, которая запускается каждую минуту, проверяя, что до начала работы группы осталось 30 минут, чтобы отправить уведомления всем пользователям на email_list.

Проблема, с которой я сталкиваюсь, заключается в том, что время, вводимое пользователем, всегда неверно. Если пользователь хочет, чтобы его группа начинала работу в 9:00 утра, в базе данных это время сохраняется в 13:00, и задание сельдерея отправляется в неправильное время

В моем файле настроек UTC установлено на true, поэтому я предположил, что оно универсально, т.е. какое бы время ни выбрал пользователь, оно будет сохранено в UTC, которое может выглядеть иначе, но все равно синхронизируется.

Вот мое расписание:

app.conf.beat_schedule = {
    'start_group_notification': {
        'task': 'start_group_notification_task',
        'schedule': crontab(),
    }
}

и вот задача:

@shared_task(name='start_group_notification_task')
def start_group_notification_task():
    thirty_minutes_from_now = datetime.datetime.now() + datetime.timedelta(minutes=30)
    chaburahs = Group.objects.filter(
        start_time__hour=thirty_minutes_from_now.hour, 
        start_time__minute=thirty_minutes_from_now.minute
    ).prefetch_related("joined")
    for group in groups: 
        for email in group.email_list:
            send_mail (
                    'group starting in 30 minutes',
                    group.name,
                    NOTIFICATION_EMAIL,
                    [email],
                    fail_silently=False
                )

То, что я хочу, довольно просто, но я не знаю, как это исправить, поскольку я не совсем понимаю, в чем проблема. Возможно, я не понимаю UTC, но когда пользователь создает группу, которая должна начинаться в 9:00 утра EST, независимо от того, в каком часовом поясе находится присоединившийся пользователь, она будет начинаться в 9:00 утра EST. Конечно, для пользователя это может быть другое время, но она всегда будет начинаться в 9:00AM EST. Итак, я не понимаю, почему модель не фильтруется и задание не отправляется, если время сохранено в UTC.

И последнее, мой админ django говорит, что мои поля времени "опережают время сервера на четыре часа", но я не уверен, UTC это или что-то другое.

Вернуться на верх