2017-12-19 1 views
-3

models.py장고 모델 DateTimeField (기본 = 다음 3 일)

class TestModel(models.Model): 
     event = models.DateTimeField(default=next 3-days) 

어떻게 3 일 다음 기본을 얻는 방법? 가능합니까?

+2

는 "다음 삼일"무엇을 의미합니까 도움이되기를 바랍니다? 이것은 * datetime *이 아닌 * period *입니다. –

+0

예 기간, 다음 3 기간 – Sam

+0

오늘부터 3 일 후를 의미합니까? – Dalvtor

답변

3

당신은 예를 들어, 당신이 원하는 날짜를 반환하는 호출 사용한다 : 당신이하기 Vaibhav의 대답으로 x = datetime.datetime.now() + datetime.timedelta(days = 3)를 사용하는 경우

from datetime import timedelta 
from django.utils import timezone 

def in_three_days(): 
    return timezone.now() + timedelta(days=3) 

class TestModel(models.Model): 
     event = models.DateTimeField(default=in_three_days) 

을, 모듈이로드 될 때 다음 x이 계산됩니다, 새로운 각각의 TestModel 인스턴스가 생성 될 때가 아닙니다.

+0

아이디어가 맞습니다. "in_three_days"함수에서 datetime.now()를 사용하면 시간 영역을 인식하지 못하고 문제가 발생할 수 있습니다. –

+0

@GiorgiJambazishvili 좋은 지적으로 사용 코드를 업데이트했습니다. 'timezone.now()'. – Alasdair

0

여기 방법이 있습니다.

import datetime 
class TestModel(models.Model): 
     x = datetime.datetime.now() + datetime.timedelta(days = 3) 
     event = models.DateTimeField(default = x) 
+1

이것은 서버가로드 될 때'x '를 한 번 계산합니다. datetime을 반환하는 호출 가능 함수를 사용해야합니다. – Alasdair

+0

나는 그것을 얻지 못했습니다 ..'x'를 반환하는 짧은 함수를 정의하는 것이 더 좋을 것이라고 말하는 것을 의미합니까 ?? 방법?? 조금 생각해 주시겠습니까 –

0

몇 가지 대답은 호출 가능해야하지만 시간대 인식 datetime 개체를 포함해야 다음 3 일을 올바르게 설정할 수 있으며 이는 예상대로 작동하며 서버에 의존하는 시간대를 인식하지 못하는 datetime 개체를 제공하지 않습니다

from django.utils import timezone as tz 

def next_day_dt(n=3): 
    return tz.localtime(tz.now()) + tz.timedelta(days=n) 

class TestModel(models.Model): 
    event = models.DateTimeField(default=next_day_dt) 
... 

시간