A Default Bug in Django
May 7, 2008
Just wanted to point out a quick tip for anyone else who may have done the same thing as me as well as for any of the django experts out there that might suggest a better way.
What was happening was that I began to notice a wild discreptancy between two datetime columns in several models. They should have been identical, however, they were both getting their dates differently:
... date_column_one = models.DateTimeField(default=datetime.now()) date_column_two = models.DateTimeField(auto_now_add=True) ...
What seems to be happening with this configuration is that datetime.now() is executed once when the server starts (and/or the module is imported) instead of what I thought would happen when I initially wrote these and that datetime.now() would get executed anytime an instance of the model was created and saved as a new record.
My solution was to override the save method:
... date_column_one = models.DateTimeField() ... def save(self): if not self.id: self.date_column_one = datetime.now() super(MyModel, self).save() ...
I am sure there is probably a better way and if you know of one, please leave a comment or send me an email and let me know!