장고에서 모델에 기본 타임 스탬프 필드가 있습니까?


90

장고에서-모든 객체에 대한 기본 타임 스탬프 필드가 있습니까? 즉, Model에서 'created on'에 대한 'timestamp'필드를 명시 적으로 선언해야합니까? 아니면 자동으로 가져올 수있는 방법이 있습니까?

답변:


175

기본적으로 그러한 것은 없지만 하나를 추가하는 것은 매우 쉽습니다. 클래스 에서 auto_now_add매개 변수를 사용하십시오 DateTimeField.

created = models.DateTimeField(auto_now_add=True)

auto_now'업데이트 날짜'필드 에도 사용할 수 있습니다 . auto_now 여기서 의 동작을 확인 하십시오 .

auto_now_add 여기 를 위해 .

두 필드가 모두있는 모델은 다음과 같습니다.

class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

32

자동으로 django가 기본적으로 수행하는 것처럼 들리지 않습니다. 타임 스탬프를 요구하지 않아도됩니다.

타임 스탬프 / 필드 이름 등을 잊지 않으려면 추상 기본 클래스를 만들고 모든 모델을 상속합니다.

class TimeStampedModel(models.Model):
     created_on = models.DateTimeField(auto_now_add=True)

     class Meta:
         abstract = True

wherever.TimeStampedModel대신 가져 오는 것이 별로 보이지 않는 것 같습니다.django.db.models.Model

class MyFutureModels(TimeStampedModel):
    ....

2
model_utils이미 포함 된 Django 도 TimeStampedModel있지만이 패키지에서 다른 것이 필요하지 않으면 추가 중량없이 유지하십시오.
boldnik

@boldnik 저는 단순함의 팬입니다.
유지 '

꽤 멋지다 ... created및에 대한 타임 스탬프가 필요한 3 개의 클래스가 updated있습니다. 이것은 깨끗하게하는 좋은 방법입니다.
ron_g


5

django-extensions를 사용해 볼 수 있습니다.

타임 스탬프 추상 모델을 사용하려는 경우

from django_extensions.db.models import TimeStampedModel

class A(TimeStampedModel):
   ...

다른 추상 모델이 있습니다. 그것도 사용할 수 있습니다.


2

이 필드를 수정할 수 있도록하려면 대신 다음을 설정하십시오. auto_now_add=True:

날짜

from datetime import date

models.DateField(default=date.today)

DateTime의 경우

from django.utils import timezone

models.DateTimeField(default=timezone.now)

0

나는 함께 갈 것이라고 생각한다

created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)

사용에 대한 설명이 필요합니다.

class TimeStampedModel(models.Model):
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
         abstract = True
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.