[Django, DRF] DateTimeField 사용하기 auto_now와 auto_now_add 구분

Django , DRF를 사용하다 보면 현재 시간을 데이터로 저장해야 할 때가 있다.

DateTimeField 를 사용하면 되는데, auto_now 속성과 auto_now_add 속성을 구분해서 사용해야 한다.

인스타그램 클론코딩 개발중에 사용자가 올린 스토리의 시간을 기록할 필요가 있었다.

 

#스토리   
class Story(models.Model):
    storyId = models.BigAutoField(primary_key=True, help_text="Story ID")
    username = models.ForeignKey(Profile,on_delete=models.CASCADE,related_name='storyPost',db_column='username',to_field='username_id')
    storyImage = models.ImageField(default='default.png',upload_to="%Y/%m/%d")
    uploadTime = models.DateTimeField(auto_now_add=True)

 

위는 내가 제작한 스토리 모델이다 uploadTime 필드가 바로 DateTimeField를 적용한 업로드 시간이다.

auto_now_add 속성을 사용하였는데 이는 생성일자를 기록해준다.

처음에 개발할 때 다른 분의 코드를 참고하다가 auto_now 속성을 적용했었다.

이는 많은 시간을 낭비하는 길로 이어졌다.

사용자가 올린 스토리는 하루가 지나면 삭제되도록 코딩했는데 auto_now 속성인 경우

model이 save 될 때마다 uploadTime이 현재 시간으로 update 되었다.

하루가 지난 스토리임에도 삭제되지 않자 스토리를 삭제하는 코드에 문제가 있는 줄 알고 한참을 헤맸었다.

auto_now_add와 auto_now 속성의 차이점을 알고나서 문제를 해결할 수 있었다.

 

간단히 정리하자면 auto_now = True : 수정일자  auto_now_add = True : 생성일자 를 담당한다.

 

참고로 DateTimeField를 사용하려면 import models를 적용해 주어야 한다.

 

from django.db import models