Skip to content
On this page

Auto Now

Auto Now

Django ORM에서 models.DatetimeField의 속성 중 auto_now=True를 설정할 경우, 매 save()시 날짜가 갱신된다.

만일 생성 시에만 현재 시간을 추가하고 싶다면 auto_now_add=True를 사용하면 QuerySet.create()시에만 날짜가 할당된다.
auto_now_add=True 대신 default=timezone.now()를 쓸 경우 warning이 발생한다. (상수가 아니기 때문)

주의

다음과 같이 객체 생성 후 저장 시 해당 필드는 null값이 할당된다.

test = Test()
test.save()

해당 방법으로 생성하면 create()함수가 호출되지 않기 때문. 따라서 위와 같이 사용하려면 다음과 같이 처리해야한다.

test = Test()
test.created_at = timezone.now() # 명시적으로 필드를 지정
test.save()

또한 QuerySet.update() 호출시에도 갱신되지 않는다. 이 경우 역시 update 시 직접 시간을 지정해줘야 한다.

auto_now, auto_now_add, default는 상호 배제적이므로 섞어 쓸 경우 오류가 발생한다.

Reference

https://docs.djangoproject.com/en/4.0/ref/models/fields/#django.db.models.DateField.auto_now