如何更改模型中日期字段的格式?

时间:2019-02-16 08:05:01

标签: python django-models

我想在Django模型类中存储一些数据。我需要存储的日期的格式为mm / dd / yy,但是django日期字段的默认格式为yyyy-mm-dd,因此我得到了django.core.exceptions.ValidationError这个错误:[“ '10 / 05/1997 'value的日期格式无效。它必须为YYYY-MM-DD格式。“] 。我该如何解决这个问题?我没有使用任何表单,所以无法使用Forms.datefield及其日期字段而不是datetimefield

1 个答案:

答案 0 :(得分:0)

您可以使用Python标准库中的datetime模块在​​不同的日期格式之间进行转换。

datetime.datetime.strptime创建一个datetime.datetime对象,给定字符串和格式; datetime.datetime.strftime返回给定日期时间和格式的字符串。

在您的情况下,您可以将显示格式定义为“ mm / dd / yyy”和“ yyyy-mm-dd”作为存储格式,并生成用于存储的日期字符串,如下所示:

>>> import datetime
>>> display_format = '%m/%d/%Y'
>>> db_format = '%Y-%m-%d'
>>> date = '10/05/1997'
>>> db_date = datetime.datetime.strptime(date, display_format).strftime(db_format)
>>> print(db_date)
1997-10-05

从存储格式到显示格式的转换类似:

>>> display_date = datetime.datetime.strptime(db_date, db_format).strftime(display_format) 
>>> print(display_date)
10/05/1997

或者,您可以split将该字符串分成几部分,然后join以所需的顺序将其与所需的分隔符一起放回原处:

>> date = '10/05/1997'
>>> month, day, year = date.split('/')
>>> month, day, year
('10', '05', '1997')
>>> 
>>> db_date = '-'.join((year, month, day))
>>> print(db_date)
1997-10-05

要从存储格式转换为显示格式:

>>> year, month, day = db_date.split('-')
>>> display_date = '/'.join((month, day, year))
>>> print(display_date)
10/05/1997