Django не дает никаких гарантий относительно того, каким будет часовой пояс ваших datetime в коде Python. Это потому, что 1) часовые пояса в основном имеют отношение к взаимодействию с пользователем (именно поэтому activate()
влияет на формы и шаблоны) и 2) операции сравнения Python учитывают часовой пояс, поэтому конкретный часовой пояс не влияет на результат.
Конечно, одна операция, которая не учитывает часовой пояс, - это извлечение времени из даты и времени и сравнение его с другим временем. Поэтому вы должны вручную преобразовать дату и время в правильный часовой пояс. У вас была правильная идея, но replace()
это неправильный способ сделать это. (Вместо того, чтобы просто преобразовать в другой часовой пояс, он изменяет фактический момент времени.)
Вместо этого сделайте следующее:
from django.utils.timezone import localtime
if localtime(instance.date_time).time() < instance.interval.from_time:
pass
Самое быстрое решение: подкласс от ATFolder вместо BaseFolder. Это дает Вам все "нормальное" переупорядочение и другие общие plone возможности папки (который я подозреваю, что Вы также хотите).
Если Вы хотите быть более выборочными, изучите Products/ATContentTypes/content/base.py: ATCTOrderedFolder и OrderedBaseFolder.