在 django 中-是否有一个默认的所有对象的时间戳字段?也就是说,我是否必须在我的模型中为“创建”显式声明一个“时间戳”字段-或者有一种方法可以自动得到它?
No such thing by default, but adding one is super-easy. Just use the auto_now_add parameter in the DateTimeField class:
auto_now_add
DateTimeField
created = models.DateTimeField(auto_now_add=True)
You can also use auto_now for an 'updated on' field. Check the behavior of auto_now here.
auto_now
For auto_now_add here.
A model with both fields will look like this:
class MyModel(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
Automagically doesn't sound like something django would do by default. It wouldn't force you to require a timestamp.
I'd build an abstract base class and inherit all models from it if you don't want to forget about the timestamp / fieldname, etc.
class TimeStampedModel(models.Model): created_on = models.DateTimeField(auto_now_add=True) class Meta: abstract = True
It doesn't seem like much to import wherever.TimeStampedModel instead of django.db.models.Model
wherever.TimeStampedModel
django.db.models.Model
class MyFutureModels(TimeStampedModel): ....
If you are using django-extensions (which is a good app for adding functionality to the django-admin.py command line helper) you can get these model fields for free by inheriting from their TimeStampedModel or using their custom TimeStamp fields
You can try django-extensions
if you want to use time-stamp abstract model
from django_extensions.db.models import TimeStampedModel class A(TimeStampedModel): ...
It has other abstract models. you can use that too.
I think i would go with
created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True)
I need some clarifications on using
If you want to be able to modify this field, set the following instead of auto_now_add=True:
auto_now_add=True:
For Date
from datetime import date models.DateField(default=date.today)
For DateTime
from django.utils import timezone models.DateTimeField(default=timezone.now)
Since you might be using IDs with your models, it's safe to use them this way.
from django.db import models from uuid import uuid4 class TimeStampedModel(models.Model): id = models.UUIDField(primary_key=True, default=uuid4, editable=False) date_created = models.DateTimeField(auto_now_add=True) date_updated = models.DateTimeField(auto_now=True) class Meta: abstract = True
Then import the TimeStampedModel in any model you want to use them, eg
class Detail(TimeStampedModel): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) class Meta: verbose_name = "Detail" verbose_name_plural = "Details"