我需要更新模型对象并保存,以便反映此结果。
但是当我尝试获取此模型的对象我已经检查过此对象存在时,
modelOne = lkmModel.objects.get(id=1)
我收到了一个错误:
AttributeError:' datetime.date'对象没有属性' tzinfo'
我已经搜索了,是的,我有一个关于' date'但这是字段:
matchingDate = models.DateTimeField(default=datetime.date.today())
当我搜索时,我的领域&匹配日期'这不是问题,不是吗?
我要写下我的models.py:
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
即使我改变了匹配日期'字段:
matchingDate = models.DateTimeField()
当我查询时,发生了完全相同的错误, 我认为它比我预期的更严重......
UPDATE! 在查询匹配日期后,它是屏幕的图像。 columnn
我做错了什么吗? 我的python版本是3.4.4,django的版本是1.9.2
谢谢!
答案 0 :(得分:1)
首先,如果没有将id
声明为primary_key
,则您的模型不能有名为django.utils.timezone.now
的字段。其次,在创建django模型时,请使用datetime
而不是datetime.date
。
问题的根本原因是您将datetime.datetime
对象作为tzinfo
实例的默认值。因此它表示缺少tzinfo
属性,即时区信息。 datetime
是time
和date
个对象的属性,而不是models.py
个对象的属性。您可以在此处详细了解:https://docs.python.org/2/library/datetime.html
因此,在修改后,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
应如下所示:
activate
这应该可以解决问题。
答案 1 :(得分:0)
首先,不要在模型中使用id。 Django自动添加为主键。
另一件事是您正在尝试在Datetime字段中填充日期对象。日期时间与日期不同。
matchingDate = models.DateTimeField(default=datetime.date.today())
改为使用
matchingDate = models.DateTimeField(default=datetime.now())
更好的是,如果你想使用默认时间作为创建对象的时间,请使用auto_now_add。(对不起,如果我误解了目的)
matchingDate = models.DateTimeField(auto_now_add=True)
但实际错误来自时区信息。
安装pytz(pip install pytz
)
并尝试将日期时间与时区信息(tzinfo)一起使用,而不是使用天真信息。
time = datetime.now(pytz.utc)
这为时区启用了日期时间
datetime.date没有属性tzinfo。您只能在datetime对象上使用它。