Login

Timestamps in Model

Author:
lindsayrgwatt
Posted:
September 3, 2008
Language:
Python
Version:
1.0
Tags:
python save timestamp
Score:
-1 (after 3 ratings)

A simple way to add date_created and date_modified timestamps to a model. Adds a date_created timestamp when the object is first created and adds a date_modified timestamp whenever the item is saved.

Note: You might be tempted instead to use: date_created=models.DateTimeField(default=datetime.now()) but that won't work as Python will calculate datetime.now() only once when it interprets your model. This means that every object created will get the same date_created timestamp until you restart your server.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from datetime import datetime

class My_Model(models.Model):
  date_created = models.DateTimeField()
  date_modified = models.DateTimeField()

  def save(self):
    if self.date_created == None:
      self.date_created = datetime.now()
    self.date_modified = datetime.now()
    super(My_Model, self).save()

More like this

  1. "Approved" field with timestamp by miracle2k 7 years, 11 months ago
  2. Modeli18n by pavl 5 years ago
  3. Fix for the bad behaviour of GenericForeignKey field by pinkeen 4 years, 5 months ago
  4. Querying datetime aware objects in your local timezone by jayliew 3 years, 1 month ago
  5. Model Locking Mixin & Decorator (MySQL Advisory Locks) by pio 4 years, 1 month ago

Comments

Archatas (on September 3, 2008):

defaults might be also set to a callable object (function, method or class) which will be evaluated before saving the model instance. So you can use this instead:

date_created=models.DateTimeField(default=datetime.now)

#

stringify (on September 3, 2008):

It would be easier to use the auto_now and auto_now_add arguments to the DateField and DateTimeField field types.

#

aarond10ster (on September 3, 2008):

I second stringify. I have been using the auto_now and auto_now_add fields for a while and have had no problems. Are they somehow different to this?

#

mk (on September 3, 2008):

They were supposed to be deprecated but since they have made their way into 1.0 and Django is expected to stay backwards compatible for a while auto_now and auto_now_add might stay, I don't know...

#

Please login first before commenting.