求教Django中model类型为DateTimeField在查询时的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教Django中model类型为DateTimeField在查询时的问题相关的知识,希望对你有一定的参考价值。

Django还有一些warning打印出来:/Users/jay/workspace/te/env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:903: RuntimeWarning: DateTimeField TestSuite.update_time received a naive datetime (2014-06-15 14:38:37.873873) while time zone support is active. RuntimeWarning)
这个warning的原因是,Django配置为使用timezone的datetime格式,而datetime.now是不包含timezone信息的。
如果不需要在程序中特别处理时区(timezone-aware),在Django项目的settings.py文件中,可以直接设置为“USE_TZ = False”就省心了。然后,在models.py中简单的设置为“ create_time = models.DateTimeField(auto_now_add=True)”和“update_time = models.DateTimeField(auto_now=True)”。
如果还要保持USE_TZ=True,则可设置为“default=datetime.now().replace(tzinfo=utc)” 。
参考技术A 这个好像不是问题,具体是什么?

将年份设置为默认值Django

我在模型中有一个字段,默认为当前字段。所以我使用默认参数,并且editable为false,但是我得到了这个错误

未定义名称“年份”

我的模特

def Get_Year():
    year = datetime.date.today().year
    return year

class DisposalHeader(models.Model):
    DisposalSecondaryKey = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)
    Year = models.IntegerField(editable=False, default=Get_Year)
    Sequence = models.IntegerField(editable=False, default=Sequence_SysGen)
    CostCenter = models.ForeignKey(CostCenter, on_delete=models.CASCADE)
    Requestor = models.ForeignKey(User, on_delete=models.CASCADE)
    SiteLocation = models.ForeignKey(SiteLocation, on_delete=models.CASCADE)
    ItemType = models.ForeignKey(ItemType, on_delete=models.CASCADE)
    Remarks = models.CharField(max_length=100, null=True)

错误屏幕截图

enter image description here

答案

尝试一下: year = datetime.datetime.now().year

另一答案

删除Get_Year函数,因为我并不真正需要它。

然后按如下所示更改模型:

year = models.DateField(default=datetime.date.today)

然后,如果您只想显示年份,则可以在模板中使用必要的格式设置选项。

以上是关于求教Django中model类型为DateTimeField在查询时的问题的主要内容,如果未能解决你的问题,请参考以下文章

[django]用日期来查询datetime类型字段

[django]用日期来查询datetime类型字段

django 比较 datetime.now 和 pub_date

Django信号基于datetime字段值

Django在Queryset中获取外键对象

将年份设置为默认值Django