Django)AttributeError:' datetime.date'尝试获取模型对象时的对象

时间:2016-05-30 19:22:21

标签: python django datetime django-models

我需要更新模型对象并保存,以便反映此结果。

但是当我尝试获取此模型的对象我已经检查过此对象存在时,

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 enter image description here

我做错了什么吗? 我的python版本是3.4.4,django的版本是1.9.2

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,如果没有将id声明为primary_key,则您的模型不能有名为django.utils.timezone.now的字段。其次,在创建django模型时,请使用datetime而不是datetime.date

问题的根本原因是您将datetime.datetime对象作为tzinfo实例的默认值。因此它表示缺少tzinfo属性,即时区信息。 datetimetimedate个对象的属性,而不是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对象上使用它。