[python] Django DateField 기본 옵션

날짜 시간 필드가있는 모델이 있습니다.

date = models.DateField(_("Date"), default=datetime.now())

내장 된 django 관리자에서 앱을 확인하면 DateField에 시간이 추가되어 저장하려고하면 오류가 반환됩니다. 기본값을 날짜로 만들려면 어떻게합니까? ( datetime.today()도 작동하지 않음)



답변

그렇기 때문에 항상datetimeimport datetimedatetime 해당 모듈 내의 클래스가 아닌 기본 모듈 :을 가져와야합니다from datetime import datetime .

다른 실수는 실제로 기본값 인 (). 즉, 모든 모델은 클래스가 처음 정의 된 시간에 날짜 얻습니다. 따라서 서버가 Apache를 다시 시작하지 않고 며칠 또는 몇 주 동안 유지되면 모든 요소가 초기 날짜와 동일하게됩니다.

따라서 필드는 다음과 같아야합니다.

import datetime
date = models.DateField(_("Date"), default=datetime.date.today)


답변

실수는 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_addauto_now됩니다 항상 현재 날짜를 사용하여 재정의 할 수있는 기본 값이 없습니다.


답변

date = models.DateTimeField(default=datetime.now, blank=True)


답변

이 문제를 해결하는 더 좋은 방법은 datetime callable을 사용하는 것입니다.

from datetime import datetime

date = models.DateField(default=datetime.now)

괄호가 사용되지 않았습니다. 괄호를 사용한 경우 now()함수를 한 번만 호출합니다 (모델이 생성 될 때). 대신 콜 러블을 인수로 전달하므로 모델의 인스턴스가 생성 될 때마다 호출됩니다.

Django Musings에 대한 크레딧 . 나는 그것을 사용했고 잘 작동합니다.


답변

이것은 트릭을 수행해야합니다.

models.DateTimeField(_("Date"), auto_now_add = True)


답변

당신은 또한 사용할 수 있습니다 lambda. django.utils.timezone.now를 사용하는 경우 유용합니다.

date = models.DateField(_("Date"), default=lambda: now().date())


답변