I have the below db model:
from datetime import datetime class TermPayment(models.Model): # I have excluded fields that are irrelevant to the question date = models.DateTimeField(default=datetime.now(), blank=True)
I add a new instance by using the below:
tp = TermPayment.objects.create(**kwargs)
My issue: all records in database have the same value in date field, which is the date of the first payment. After the server restarts, one record has the new date and the other records have the same as the first. It looks as if some data is cached, but I can't find where.
database: mysql 5.1.25
it looks like
datetime.now() is being evaluated when the model is defined, and not each time you add a record.
Django has a feature to accomplish what you are trying to do already:
date = models.DateTimeField(auto_now_add=True, blank=True)
date = models.DateTimeField(default=datetime.now, blank=True)
The difference between the second example and what you currently have is the lack of parentheses. By passing
datetime.now without the parentheses, you are passing the actual function, which will be called each time a record is added. If you pass it
datetime.now(), then you are just evaluating the function and passing it the return value.
More information is available at Django's model field reference
Instead of using
datetime.now you should be really using
from django.utils.timezone import now
so go for something like this:
from django.utils.timezone import now created_date = models.DateTimeField(default=now, editable=False)