본문 바로가기

Django

DateTimeField를 추가할 때

데이터의 생성 일시와 수정 일시를 저장할 땐 대개 아래 두가지를 사용한다. auto_now_add는 최초로 생성할 시에만 들어가고, auto_now는 저장될 때마다 업데이트 된다. 둘 다 직접적으로 건드릴 수 없다.(editable=False)

created_at = DateTimeField(auto_now_add=True)

updated_at = DateTimeField(auto_now=True)

 

이런 column은 당장 사용하지 않더라도 확장성을 고려하여 나중에 필요할 법한 곳에 미리 추가해두는 게 좋다. DB에 이미 저장되어 있는 데이터가 있는데 DateTimeField를 추가하고자 한다면 이 column에 값을 채워넣어야 되기 때문에 아래와 같은 메세지가 나온다.

3을 선택해서 나간 뒤 models.py의 DateTimeField에 null=True를 입력해도 같은 메세지가 뜬다.

timezone.now()를 치면 이미 들어가 있던 데이터의 생성 일시와 수정 일시를 현재로 넣어준다.

이 때 어떤 시간대를 사용한 데이터가 DB에 들어가는지는 settings.py의 설정에 달려있다. 한국 시간을 사용하기 위해 TIME_ZONE을 Asia/Seoul로 바꾸더라도 USE_TZ = True 면 장고의 default인 UTC를 사용한다. 이걸 False로 설정하면 모든 datetime이 TIME_ZONE의 시간대를 사용한다. 참고 링크

 

더 공부할 것

데이터를 바로 create해서 넣는 게 아니라 객체 생성 후 저장하는 방식에서는 auto_now_add 속성이 True로 되어있는 column이 null로 들어가는 이슈가 있다고 한다. 정말 그런지 확인하기. 참고 링크