, если вы можете превратить свой вычислительный алгоритм во что-то, что можно назвать итеративно, вы можете временно отменить управление браузером через setTimeout с коротким значением таймаута.
Например, что-то вроде этого ...
function doCalculation()
{
//do your thing for a short time
//figure out how complete you are
var percent_complete=....
return percent_complete;
}
function pump()
{
var percent_complete=doCalculation();
//maybe update a progress meter here!
//carry on pumping?
if (percent_complete<100)
{
setTimeout(pump, 50);
}
}
//start the calculation
pump();
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
Я немного погуглил и обнаружил, что django намеревается всегда сохранять в формате UTC
в модели, но во время извлечения из db преобразовывается в TIME_ZONE, установленный настройками. ссылка . Так что я полагаю, что есть возможность в формате UTC
в экземпляре pre-save. Я могу ошибаться, поскольку у меня нет конкретных сильных знаний об этом.
Я думаю, что это сравнение должно быть сделано в режиме реального времени. Так что теперь совершенно безопасно использовать пользователя TIME_ZONE для сравнения с интервалом from_time. Так что мое предложение
import pytz
import datetime
tz = pytz.timezone('Europe/Sofia')
curtime = tz.localize(datetime.datetime.now())
и преобразовать эту строку кода
if instance.date_time.time() < instance.interval.from_time:
# this returns True when it's meant to return False
в
if curtime < instance.interval.from_time:
# I hope this return False now