스택큐힙리스트

장고 날짜 시간 문제 (기본값=datetime.now()) 본문

카테고리 없음

장고 날짜 시간 문제 (기본값=datetime.now())

스택큐힙리스트 2023. 4. 18. 03:50
반응형

저는 아래와 같은 데이터베이스 모델을 갖고 있습니다:

from datetime import datetime

class TermPayment(models.Model):

# I have excluded fields that are irrelevant to the question

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

아래를 사용하여 새로운 인스턴스를 추가합니다.

tp = TermPayment.objects.create(**kwargs)

내 문제는 데이터베이스의 모든 레코드가 첫 번째 결제 날짜인 날짜 필드에 동일한 값을 갖고 있다는 것입니다. 서버가 다시 시작되면 하나의 레코드는 새로운 날짜를 갖고, 나머지 레코드는 첫 번째 레코드와 동일한 값을 갖고 있습니다. 데이터가 캐시된 것으로 보이지만, 어디에서 찾을 수 있는지 모르겠습니다.

데이터베이스: mysql 5.1.25

장고 v1.1.1

답변 1

모델이 정의될 때 datetime.now()이(가) 평가되며, 레코드를 추가할 때마다 평가되지 않는 것 같습니다.

장고에는 이미 당신이 시도하고 있는 것을 달성하는 기능이 있습니다.

date = models.DateTimeField(auto_now_add=True, blank=True)

또는

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

두 번째 예와 현재 가지고 있는 것과의 차이점은 괄호의 부재입니다. 괄호 없이 datetime.now을 전달함으로써 실제 함수가 전달되며, 이 함수는 레코드가 추가될 때마다 호출됩니다. 만약 datetime.now()을 전달한다면, 함수를 평가하고 반환 값만 전달합니다.

더 많은 정보는 Django의 model field reference에서 확인하실 수 있습니다.

답변 2

[Django] datetime 문제 (default=datetime.now())

Django에서 datetime.now()를 사용할 때 문제가 발생하는 경우가 있습니다. 이 문제는 서버 time zone 설정과 관련이 있습니다.

서버 시간대와 실제 시간대가 다른 경우, 일관성 있는 날짜 및 시간 데이터를 유지하는 것이 어렵습니다. 이는 대개 웹 애플리케이션이 여러 시간대에서 작동할 때 문제가 됩니다.

Django에서 이러한 문제를 해결하기 위해 타임존을 사용합니다. 타임존은 서버의 시간대와 모든 사용자의 시간대를 고려하여 일관된 날짜 및 시간 데이터를 제공합니다.

default=datetime.now() 사용 시, 이 문제를 해결하기 위해 timezone.now()를 사용할 수 있습니다. timezone.now()는 서버 시간대와 관계없이 일관된 날짜 및 시간 데이터를 제공하기 때문입니다.

따라서, Django에서 datetime.now()를 사용할 때는 서버 시간대 문제를 고려하여 timezone.now()를 사용하는 것이 좋습니다. 이를 통해 일관된 데이터를 유지할 수 있으며, 웹 애플리케이션의 성능과 안정성을 보장할 수 있습니다.

또한, 타임존을 설정함으로써 다양한 시간대에서 작동하는 웹 애플리케이션이 일관된 날짜 및 시간 데이터를 제공할 수 있습니다. 이는 사용자 경험을 향상시키는 데 큰 역할을 합니다.

따라서, Django에서 datetime 문제를 해결하기 위해 timezone.now()를 사용하는 것이 바람직하며, 이를 통해 웹 애플리케이션의 성능과 안정성을 향상시킬 수 있습니다.

반응형
Comments