当日期看起来没问题时在 Django 中获取无效的日期格式

Getting invalid date format in Django when date seems to look ok

在我的 Django 程序中,尝试保存到数据库时抛出以下异常:

[u"'2015-09-17 00:00:00' value has an invalid date format. It must be in YYYY-MM-DD format."]

日期 2015-09-17 对我来说没问题,但显然我遗漏了什么?

数据库字段定义如下:

date = models.DateField(blank=True, null=True)

问题出在时间上,00:00:00。
如果删除它,可能会起作用。

您正在尝试保存和解析日期和时间。这是无效的。

您可以使用 DateTimeField 而不是 DateField 或编写自定义日期格式。看到这个:https://docs.djangoproject.com/en/1.8/ref/settings/#date-format 但我建议不要这样做 - 本地化存在问题。

只需遵循您的日期格式,而不是日期时间格式。

您收到的字符串包含有关日期和时间的信息。但是,您用来在数据库中保存该信息的字段是导致错误的 DateField

您需要将接收到的日期时间对象的字符串表示形式转换为 Python datetime.date 对象。

这可以使用 .strptime() 来完成,其中 returns datetime 对象对应于传递给它的日期字符串和用于解析它的格式。然后,我们可以对其调用 .date() 来获取日期对象。

In [1]: from datetime import datetime

In [2]: received_datetime_repr = '2015-09-17 00:00:00' # string representation of datetime object

In [3]: received_datetime = datetime.strptime(received_datetime_repr, '%Y-%m-%d %H:%M:%S') # convert to datetime object

In [4]: received_datetime
Out[4]: datetime.datetime(2015, 9, 17, 0, 0)

In [5]: my_date_obj = received_datetime.date() # convert to date object

In [6]: my_date_obj
Out[6]: datetime.date(2015, 9, 17) # required value

此处,my_date_obj 是您想要保存在数据库中的所需值。