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 :(得分:2)
问题是您的默认值没有意义。没有零日,也没有零月。 Python可以表示为datetime
对象的最小日期是:
>>> datetime.min
datetime.datetime(1, 1, 1, 0, 0)
所以1月1日,1。在某些(大多数)数据库中,范围甚至更加严格。例如,在MySQL中,范围是:
DATE
类型用于具有日期部分但没有时间部分的值。 MySQL检索并以DATE
格式显示'YYYY-MM-DD'
值。 受支持的范围是'1000-01-01'
至'9999-12-31'
。
DATETIME
类型用于包含日期和时间的值 部分。 MySQL检索并以DATETIME
格式显示'YYYY-MM-DD HH:MM:SS'
值。 支持的范围是'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确实有一个“零日期”:
无效的
DATE
,DATETIME
或TIMESTAMP
值被转换为 适当类型('0000-00-00'
或'0000-00-00 00:00:00'
)的“零”值。
但是没有很好的方法将其包装到datetime
对象中,因为如前所述,它超出了可表示的范围。
您可以使用提出的解决方案here,该解决方案基本上是构造一个新的Django ZeroDateTimeField
来将None
映射到该零值上。但是,据我所知,您可以不用标准的DateTimeField
来做到这一点。
因此,您可以使用数据库可表示的最小可表示的datetime
对象,也可以使用NULL
。