Hi I have a model like so:
from datetime import datetime
class Project(models.Model):
created = models.DateTimeField(editable=False)
updated = models.DateTimeField(editable=False)
product = models.ForeignKey('tool.product')
module = models.ForeignKey('tool.module')
model = models.ForeignKey('tool.model')
zipcode = models.IntegerField(max_length=5)
def save(self, **kwargs):
if not self.id:
self.created = datetime.now()
self.updated = datetime.now()
super(Project, self).save()
def __unicode__(self):
return self.id
However when I try to save a project I get:
coercing to Unicode: need string or buffer, long found
and from the runserver:
RuntimeWarning: DateTimeField received a naive datetime (2012-10-31 14:45:36.611622) while time zone support is active.
I'm not sure exactly what the problem is here but I'm assuming it has something to do with timezone getting in the way of saving the DateTimeField.
Any help would be much appreciated.
First of all DateTimeField supports auto updating like this:
created = models.DateTimeField(editable=False, auto_now_add=True) # Only on creation
updated = models.DateTimeField(editable=False, auto_now=True) # On every save
Secondly the RuntimeWarning you get, means that you have enabled in your settings.py timezone aware datetime objects e.g you will see the following:
USE_TZ = True
When you do that, you have to treat datetime objects differently, you have to pass
explicitly a tzinfo value.
# install the `pytz` module through pip or whatnot
from pytz import timezone
import datetime
from django.utils.timezone import utc
now = datetime.datetime.utcnow().replace(tzinfo=utc)
# To show the time in Greece
athens = timezone('Europe/Athens')
print now.astimezone(athens)
For more info see the django docs and the pytz docs.
About the coercing to Unicode: error, try doing this:
def __unicode__(self):
return unicode(self.id)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With