일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 클라우드컴퓨팅
- 프로그래밍
- Yes
- 데이터분석
- 데이터베이스
- 자료구조
- 인공지능
- 데이터과학
- 코딩
- 보안
- 소프트웨어공학
- 웹개발
- 컴퓨터과학
- 버전관리
- 사이버보안
- I'm Sorry
- 네트워크
- 머신러닝
- 데이터구조
- 컴퓨터공학
- 2
- 알고리즘
- 소프트웨어
- 빅데이터
- 자바스크립트
- 컴퓨터비전
- 딥러닝
- 네트워크보안
- 프로그래밍언어
- 파이썬
- Today
- Total
스택큐힙리스트
장고 날짜 시간 문제 (기본값=datetime.now()) 본문
저는 아래와 같은 데이터베이스 모델을 갖고 있습니다:
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()를 사용하는 것이 바람직하며, 이를 통해 웹 애플리케이션의 성능과 안정성을 향상시킬 수 있습니다.