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?
No such thing by default, but adding one is super-easy. Just use the
auto_now_add parameter in the
created = models.DateTimeField(auto_now_add=True)
You can also use
auto_now for an ‘updated on’ field. Check their behaviour in the doc.
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
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.