2014-12-15 3 views
14

장고 모델의 키 만료에 대한 타임 스탬프를 설정하려고이 문제에 부딪쳤다 :장고 기본 = timezone.now + 델타

내 현재 코드 :

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

위의 코드 하지만 "timezone.now()"가 사용되면 아파치가 다시 시작될 때 타임 스탬프 양식을 얻습니다. 따라서 작동하지 않습니다. 나는 약간의 연구를했고 그 문제의 그 부분을위한 솔루션을 발견했다. 그래서 "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)) 

형식 오류 : 지원되지 않는 피연산자 유형 (들) +에 대한 '기능'과 '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