2014-12-15 3 views
14

Попытка установить метку времени для ключа истечения в модели Django и наткнулся на этот вопрос:Джанго по умолчанию = timezone.now + дельта

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

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 часа вперед.

Любая помощь очень ценится.

ответ

20

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

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

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

Спасибо Кевин, ваша помощь очень ценится! – Nerses

+0

'django.db.utils.OperationalError: (1067," Недопустимое значение по умолчанию для 'date_end' ")' – Viktor