Django default=timezone.now + дельта

Попытка установить отметку времени для истечения срока действия ключа в модели Django и столкнулась с этой проблемой:

Мой текущий код:

key_expires = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=1))

Приведенный выше код работает, однако, когда используется «timezone.now ()», он получает временную метку из времени перезапуска Apache, поэтому это не работает. Я провел некоторое исследование и нашел решение для этой части проблемы, поэтому, заменив «timezone.now ()» на «timezone.now», я получаю текущую отметку времени каждый раз, когда объект создается, что идеально , проблема частично решена.

У меня возникли проблемы с изменением даты с помощью "timezone.timedelta(days=1)".

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))

Ошибка, которую я получаю:

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))

TypeError: неподдерживаемые типы операндов для +: «функция» и «datetime.timedelta»

Цель состоит в том, чтобы установить отметку времени на 24 часа вперед.

Любая помощь приветствуется.


person Nerses    schedule 15.12.2014    source источник


Ответы (1)


default принимает вызываемый объект, поэтому вам просто нужно написать функцию, которая будет делать то, что вы хотите, а затем предоставить ее в качестве аргумента:

def one_day_hence():
    return timezone.now() + timezone.timedelta(days=1)

class MyModel(models.Model):
    ...
    key_expires = models.DateTimeField(default=one_day_hence)

(Как обсуждалось здесь, не поддавайтесь искушению сделать это lambda.)

person Kevin Christopher Henry    schedule 15.12.2014