In django do models have a default timestamp field?

旧街凉风 提交于 2019-12-03 04:06:27

问题


In django - is there a default timestamp field for all objects? That is, do I have to explicitly declare a 'timestamp' field for 'created on' in my Model - or is there a way to get this automagically?


回答1:


No such thing by default, but adding one is super-easy. Just use the auto_now_add parameter in the DateTimeField class:

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.

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)



回答2:


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

class MyFutureModels(TimeStampedModel):
    ....



回答3:


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




回答4:


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.




回答5:


If you want to be able to modify this field, set the following instead of 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)



回答6:


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

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

    class Meta:
         abstract = True


来源:https://stackoverflow.com/questions/8016412/in-django-do-models-have-a-default-timestamp-field

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!