【问题标题】:how can I change the format of a datefield in models?如何更改模型中日期字段的格式?
【发布时间】:2019-07-10 06:59:57
【问题描述】:

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

【问题讨论】:

标签: python django-models


【解决方案1】:

您可以使用 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

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    相关资源
    最近更新 更多