尽管在设置中指定了日期格式,但 Django 在运行测试时给了我一个“无效的日期格式”错误

Posted

技术标签:

【中文标题】尽管在设置中指定了日期格式,但 Django 在运行测试时给了我一个“无效的日期格式”错误【英文标题】:Django is giving me an "invalid date format" error when running tests despite specifying date format in settings 【发布时间】:2020-05-04 15:58:22 【问题描述】:

我的设置文件有以下设置:

# settings.py
USE_L10N = False
DATE_INPUT_FORMATS = ['%m/%d/%Y']

在我的测试文件中,我正在创建一个需要日期的对象,如下所示:

# tests.py
my_model = Thing(a_date='11/22/2019').save()

但是,当我运行测试时,测试在创建对象时卡住并抛出错误:

django.core.exceptions.ValidationError: ["'11/22/2019' 值的日期格式无效。它必须是 YYYY-MM-DD 格式。"]

我有什么遗漏吗?为什么会抛出这个错误?

【问题讨论】:

models.py 中的 Thing 模型的结构如何? 【参考方案1】:

你需要设置DATE_INPUT_FORMATS,因为DATE_FORMAT设置Django如何显示日期。

更改您的代码:

DATE_INPUT_FORMATS = ['%m/%d/%Y']

【讨论】:

【参考方案2】:

确保将USE_L10N 设置为FALSE

(https://docs.djangoproject.com/en/dev/ref/settings/#date-format)

另见:How to change the default Django date template format?

【讨论】:

我添加了DATE_INPUT_FORMATS = ['%m/%d/%Y'],但仍然出现错误。 您确定正在找到并应用设置文件吗? (例如,***.com/questions/42927394/…)但是 Chris 可能对Forms 有意见,但对Models 问题没有意见(code.djangoproject.com/ticket/27364)。【参考方案3】:

也许您需要将广告 date_input_format 读取为 there 和 there

【讨论】:

【参考方案4】:

据我所知,DATE_INPUT_FORMATSForms 相关,但与 Models 无关。

针对同一问题提出了(无效)票证here。

【讨论】:

好吧,不是在模型级别,而是在表单级别。所以例如如果用户以ModelForm 中定义的格式之一输入日期并保存表单,则一切正常。如果您尝试使用这些格式直接在程序中创建模型,它将无法正常工作。让我这样说:DATE_INPUT_FORMATS 用于用户交互

以上是关于尽管在设置中指定了日期格式,但 Django 在运行测试时给了我一个“无效的日期格式”错误的主要内容,如果未能解决你的问题,请参考以下文章

尽管在 CMake 中指定了库,但未定义的引用错误(与 libtorch 链接的问题(C++11 ABI?)

IntelliJ IDEA 13 使用 Java 1.5,尽管设置为 1.7

登录失败,虽然我在我的 RDS 实例的安全组中指定了入站规则

尽管使用 ++,但循环计数器“呈指数”增加

使用 L10N 在 Django 模板中为一种语言指定日期格式

将表单提交中指定的任何日期转换为给定格式