날짜 시간 필드가있는 모델이 있습니다.
date = models.DateField(_("Date"), default=datetime.now())
내장 된 django 관리자에서 앱을 확인하면 DateField
에 시간이 추가되어 저장하려고하면 오류가 반환됩니다. 기본값을 날짜로 만들려면 어떻게합니까? ( datetime.today()
도 작동하지 않음)
답변:
그렇기 때문에 항상datetime
import datetime
datetime
해당 모듈 내의 클래스가 아닌 기본 모듈 :을 가져와야합니다from datetime import datetime
.
다른 실수는 실제로 기본값 인 ()
. 즉, 모든 모델은 클래스가 처음 정의 된 시간에 날짜 를 얻습니다. 따라서 서버가 Apache를 다시 시작하지 않고 며칠 또는 몇 주 동안 유지되면 모든 요소가 초기 날짜와 동일하게됩니다.
따라서 필드는 다음과 같아야합니다.
import datetime
date = models.DateField(_("Date"), default=datetime.date.today)
_("Date")
거야?
실수는 datetime
모듈 대신 모듈을 사용하는 것입니다 date
. 당신은 이것을하려고했습니다 :
from datetime import date
date = models.DateField(_("Date"), default=date.today)
현재 날짜 만 캡처하려는 경우이를 처리하는 적절한 방법은 auto_now_add
매개 변수 를 사용하는 것입니다 .
date = models.DateField(_("Date"), auto_now_add=True)
그러나, modelfield 워드 프로세서 것을 명확 상태 auto_now_add
및 auto_now
됩니다 항상 현재 날짜를 사용하여 재정의 할 수있는 기본 값이 없습니다.
date = models.DateTimeField(default=datetime.now, blank=True)
이 문제를 해결하는 더 좋은 방법은 datetime callable을 사용하는 것입니다.
from datetime import datetime
date = models.DateField(default=datetime.now)
괄호가 사용되지 않았습니다. 괄호를 사용한 경우 now()
함수를 한 번만 호출합니다 (모델이 생성 될 때). 대신 콜 러블을 인수로 전달하므로 모델의 인스턴스가 생성 될 때마다 호출됩니다.
Django Musings에 대한 크레딧 . 나는 그것을 사용했고 잘 작동합니다.
당신은 또한 사용할 수 있습니다 lambda
. django.utils.timezone.now를 사용하는 경우 유용합니다.
date = models.DateField(_("Date"), default=lambda: now().date())