django日期格式'dd-mm-yyyy'

Sev*_*ths 20 django django-forms

有什么方法可以让django将我的数据存储在postgresql中作为'dd-mm-yyyy'(如果需要)并让django表单验证'dd-mm-yyyy'?

(我尝试过没有太多成功的事情:

DATE_INPUT_FORMATS = ('%d-%m-%Y')
USE_I18N = True
USE_L10N = True
Run Code Online (Sandbox Code Playgroud)

并做了很多谷歌搜索但没有成功:(

Sev*_*ths 36

结果问题是我在settings.py文件中需要ISO和UK日期格式,如下所示:

DATE_INPUT_FORMATS = ('%d-%m-%Y','%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)

然后将forms.py调整为以下内容:

class ClientDetailsForm(ModelForm):
    date_of_birth = DateField(input_formats=settings.DATE_INPUT_FORMATS)
    class Meta:
        model = ClientDetails
Run Code Online (Sandbox Code Playgroud)

为什么USE_L10N = True不能这样做我不知道!

[感谢这个这个 ]


Ski*_*Ski 20

DATE_INPUT_FORMATS在settings.py中没有效果USE_I18N = True.这是因为django将为活动区域设置加载特定格式.Django附带了许多不同语言环境的格式定义.

您可以覆盖django默认格式定义:

mysite/
    formats/
        __init__.py
        en/
            __init__.py
            formats.py
Run Code Online (Sandbox Code Playgroud)

如django文档中所述:创建自定义格式文件


Ton*_*ony 11

Sevenearths回答有评论

为什么USE_L10N = True不能这样做我不知道!

文档说这USE_L10N = True是默认设置,但要使英国日期生效,LANGUAGE_CODE还必须将其默认设置更改en-usen-GB.

更改后,日期字段会自动接受格式"dd/mm/yyyy"和"yyyy-mm-dd"(可能还有其他格式,我没有全部测试过),无需input_formats = settings.DATE_INPUT_FORMATS在每个表单日期字段中设置.