I need to update a model object and save so that this result can be reflected.
But when I try to get an object of this model that I checked already this object exists,
modelOne = lkmModel.objects.get(id=1)
I got an error :
AttributeError: 'datetime.date' object has no attribute 'tzinfo'
I searched already , yes I have a field about 'date' but this is field is :
matchingDate = models.DateTimeField(default=datetime.date.today())
As I searched, my field 'matchingDate' is not a problem, isn't it?
I'm going to write my models.py below :
from django.db import models
import datetime
class lkmModel(models.Model):
id = models.IntegerField()
matchingDate = models.DateTimeField(default=datetime.date.today())
isNoon = models.BooleanField(default=True)
dayOfWeek = models.IntegerField()
profileUrl = models.TextField()
name = models.CharField(max_length=20,default=None)
affiliation = models.CharField(max_length=20,default=None)
age = models.IntegerField(db_index=True)
residence = models.CharField(max_length=20,default=None)
bloodType = models.CharField(max_length=20,default=None)
religion = models.CharField(max_length=20,default=None)
personality = models.TextField(default=None)
appearance = models.TextField(default=None)
hobby = models.TextField(default=None)
ability = models.TextField(default=None)
idealType = models.TextField(default=None)
career = models.TextField(default=None)
best = models.TextField(default=None)
badge1 = models.CharField(max_length=10,default=None)
badge2 = models.CharField(max_length=10,default=None)
badge3 = models.CharField(max_length=10,default=None)
manual = models.TextField(default=None)
point = models.IntegerField()
def __str__(self):
return self.name
Even though I changed 'matchingDate' field to :
matchingDate = models.DateTimeField()
When I queried , exactly the same error is occurring, I think it is more serious than I expected...
UPDATE!
It's the image of the screen after querying 'matchingDate' columnn

Is there anything I did wrong? My python version is 3.4.4 and django's version is 1.9.2
Thank you!
First, your model cannot have a field named id without it being declared as a primary_key. Secondly, while creating django models use django.utils.timezone.now instead of datetime.
The root cause of the problem you have is that you're giving datetime.date object as default to a datetime.datetime instance. Hence it says that tzinfo attribute i.e. time zone information is missing. tzinfo is an attribute to datetime and time objects, not date objects. You can read more about it here: https://docs.python.org/2/library/datetime.html
So, after modifications your models.py should look like this:
from django.db import models
from django.utils import timezone
class lkmModel(models.Model):
id = models.IntegerField(primary_key=True)
matchingDate = models.DateTimeField(default=timezone.now)
isNoon = models.BooleanField(default=True)
dayOfWeek = models.IntegerField()
profileUrl = models.TextField()
name = models.CharField(max_length=20,default=None)
affiliation = models.CharField(max_length=20,default=None)
age = models.IntegerField(db_index=True)
residence = models.CharField(max_length=20,default=None)
bloodType = models.CharField(max_length=20,default=None)
religion = models.CharField(max_length=20,default=None)
personality = models.TextField(default=None)
appearance = models.TextField(default=None)
hobby = models.TextField(default=None)
ability = models.TextField(default=None)
idealType = models.TextField(default=None)
career = models.TextField(default=None)
best = models.TextField(default=None)
badge1 = models.CharField(max_length=10,default=None)
badge2 = models.CharField(max_length=10,default=None)
badge3 = models.CharField(max_length=10,default=None)
manual = models.TextField(default=None)
point = models.IntegerField()
def __str__(self):
return self.name
This should solve the problem.
The first thing is do not use id in models. Django adds that automatically as the primary key.
The other thing is that you are trying to fill date object in a Datetime field. Datetime is different from Date.
matchingDate = models.DateTimeField(default=datetime.date.today())
Instead use
matchingDate = models.DateTimeField(default=datetime.now())
Better still, use auto_now_add if you want to use the default time as the time of creation of the object.(Sorry if i am misunderstanding the purpose)
matchingDate = models.DateTimeField(auto_now_add=True)
But the actual error comes from timezone info thing.
Install pytz (pip install pytz)
and try to use the datetime with time zone info (tzinfo) instead of a naive one.
time = datetime.now(pytz.utc)
This gives timezone enabled datetime
datetime.date has no attribute tzinfo. You have to use it on datetime object only.
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