关于python:如何更改模型中日期字段的格式?

how can I change the format of a datefield in models?

我想在我的django模型类中存储一些数据。我需要存储的日期的格式是mm/dd/yy,但django日期字段的默认格式是yyyy-mm-dd,因此我得到了此错误django.core.exceptions.validationError:"'10/05/1997"值的日期格式无效。它必须是YYYY-MM-DD格式。"]. 如何解决此问题?我没有使用任何窗体,因此不能使用Forms.DateField及其DateField而不是DateTimeField


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

datetime.datetime.strptime在给定字符串和格式的情况下创建datetime.datetime对象;datetime.datetime.strftime返回给定日期时间和格式的字符串。

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

1
2
3
4
5
6
7
>>> 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

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

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

或者,您可以将字符串拆分为多个部分,然后使用所需的分隔符按所需的顺序将其重新连接到一起:

1
2
3
4
5
6
7
8
>> 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

要从存储格式转到显示格式:

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