Django)属性错误:'日期时间.日期'尝试获取mod对象时的对象

2024-09-28 03:17:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要更新一个模型对象并保存,这样就可以反映这个结果。在

但是当我试图得到这个模型的一个对象时,我已经检查了这个对象是否存在

modelOne = lkmModel.objects.get(id=1)

我有个错误:

AttributeError: 'datetime.date' object has no attribute 'tzinfo'

我已经搜索过了,是的,我有一个关于“日期”的字段,但这个字段是:

^{pr2}$

当我搜索的时候,我的字段“matchingDate”不是问题,不是吗?在

我要写我的模型.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()

当我问的时候,同样的错误发生了, 我觉得比我预想的更严重。。。

更新! 这是查询“matchingDate”列后的屏幕图像 enter image description here

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

谢谢你!在


Tags: 对象模型noneiddefaultdatetimemodels错误
2条回答

第一件事是不要在模型中使用id。Django自动将其添加为主键。在

另一件事是,您试图在Datetime字段中填充date对象。日期时间与日期不同。在

matchingDate = models.DateTimeField(default=datetime.date.today())

而是使用

^{pr2}$

更好的是,如果您想使用默认时间作为创建对象的时间,请使用auto_now_add。(如果我误解了目的,请抱歉)

matchingDate = models.DateTimeField(auto_now_add=True)

但实际的错误来自时区信息。在

安装pytz(pip install pytz

并尝试使用带有时区信息(tzinfo)的datetime,而不是幼稚的。在

time = datetime.now(pytz.utc)

这将提供启用时区的日期时间

在日期时间.日期没有属性tzinfo。您必须仅在datetime对象上使用它。在

首先,您的模型不能有一个名为id的字段,而不将其声明为primary_key。其次,在创建django模型时,使用django.utils.timezone.now,而不是{}。在

问题的根本原因是您将datetime.date对象作为默认值提供给一个datetime.datetime实例。因此,它指出tzinfo属性,即时区信息丢失。tzinfodatetimetime对象的属性,而不是date对象的属性。你可以在这里阅读更多信息:https://docs.python.org/2/library/datetime.html

因此,修改后,models.py应该如下所示:

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

这应该能解决问题。在

相关问题 更多 >

    热门问题