【问题标题】:Unable to set default vale of DateTimeField to "0000-00-00 00:00:00"无法将 DateTimeField 的默认值设置为“0000-00-00 00:00:00”
【发布时间】:2019-04-02 04:57:41
【问题描述】:
fld_date_time = models.DateTimeField(db_column='FLD_DATE_TIME', blank=True, null=True, default="0001-00-00 00:00:00")

models.py 中的这个字段抛出错误为:

["'0000-00-00 00:00:00' 值的格式正确 (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) 但它是无效的日期/时间。”]

如何在django中添加默认值?

【问题讨论】:

  • 就像它说的那样,这是一个无效的日期/时间。因此,您不能将其设置为默认值。因为它无效。
  • 没错,没有第 0 天,也没有第 0 个月。

标签: python django database django-models


【解决方案1】:

问题是你的默认值没有意义。没有第零天,也没有第零个月。 Python 可以表示为datetime 对象的最小日期是:

>>> datetime.min
datetime.datetime(1, 1, 1, 0, 0)

所以 1 月 1 日,1。在某些(大多数)数据库中,范围更加严格。例如在MySQL 中,范围是:

DATE 类型用于具有日期部分但没有时间部分的值。 MySQL 以'YYYY-MM-DD' 格式检索并显示DATE 值。 支持的范围是'1000-01-01''9999-12-31'

DATETIME 类型用于同时包含日期和时间的值 部分。 MySQL 以'YYYY-MM-DD HH:MM:SS' 格式检索并显示DATETIME 值。 支持的范围是'1000-01-01 00:00:00''9999-12-31 23:59:59'.

TIMESTAMP 数据类型用于包含两个日期的值 和时间部分。 TIMESTAMP 的范围为 '1970-01-01 00:00:01' UTC 到'2038-01-19 03:14:07'UTC.

MySQL确实有“零日期”:

无效的 DATEDATETIMETIMESTAMP 值将转换为 相应类型的“零”值('0000-00-00''0000-00-00 00:00:00')。

但是没有很好的方法将它包装到datetime 对象中,因为如前所述,它超出了可表示的范围。

您可以使用here 提出的解决方案,该解决方案基本上构造了一个新的Django ZeroDateTimeField 以将None 映射到这个零值上。但据我所知,您可以不使用标准 DateTimeField 执行此操作。

因此,您可以使用数据库可表示的最小可表示datetime 对象,或者改用NULL

【讨论】:

    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 2010-11-24
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    相关资源
    最近更新 更多