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

时间:2011-02-02 15:34:13

标签: django django-forms

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

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

DATE_INPUT_FORMATS = ('%d-%m-%Y')
USE_I18N = True
USE_L10N = True

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

8 个答案:

答案 0 :(得分:34)

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

DATE_INPUT_FORMATS = ('%d-%m-%Y','%Y-%m-%d')

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

class ClientDetailsForm(ModelForm):
    date_of_birth = DateField(input_formats=settings.DATE_INPUT_FORMATS)
    class Meta:
        model = ClientDetails

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

[感谢thisthis]

答案 1 :(得分:19)

settings.py中的

DATE_INPUT_FORMATSUSE_I18N = True无效。这是因为django将为活动区域设置加载特定格式。 Django附带了许多不同语言环境的格式定义。

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

mysite/
    formats/
        __init__.py
        en/
            __init__.py
            formats.py

如django文档中所述:Creating custom formats file

答案 2 :(得分:10)

Sevenearths answer中有评论

  

为什么USE_L10N = True无法做到这一点我不知道!

文档说明USE_L10N = True是默认设置,但为了让英国日期有效,LANGUAGE_CODE也必须从默认设置en-us更改为en-GB

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

答案 3 :(得分:2)

这可能不是确切问题的答案,但是因为我到了这里......我建议使用日期小部件,让Django以它理解的方式保存日期。在表单中定义字段,如下所示:

import datetime
from django import forms

def last_years():
    first_year = datetime.datetime.now().year - 6
    return list(range(first_year + 7, first_year, -1))

class MyForm(forms.Form):
    # This is it... it's user friendly, and can't go wrong parsing it
    date = forms.DateField(widget=forms.SelectDateWidget(years = last_years()))

如果你把它放到了Django模型的日期字段中,那么剩下的唯一问题就是格式化输出表示。我是对的吗?

答案 4 :(得分:1)

这对我有用

date_of_birth = forms.DateField(
    localize=True,
    widget=forms.DateInput(format = '%Y-%m-%d',attrs={'type': 'date'}),
)

答案 5 :(得分:1)

我使用了以下适用于“添加和编辑表单案例”的代码。

在settings.py

DATE_INPUT_FORMATS = ('%d/%m/%Y','%d-%m-%Y','%Y-%m-%d')

forms.py

class MyModelForm(forms.ModelForm):
    issue_date = forms.DateField(widget=forms.DateInput(format = '%d/%m/%Y'), input_formats=settings.DATE_INPUT_FORMATS)

答案 6 :(得分:0)

我会覆盖DateTimeField把我的逻辑。 postgresql如何存储它并不重要,您可以根据需要对其进行格式化。

文档: http://docs.djangoproject.com/en/dev/ref/models/instances/

答案 7 :(得分:-2)

如果您想以恰好这种格式存储CharField,则可以使用它;否则它将使用python datetime格式。

如果使用CharField,则可以编写一个包含该字段自定义验证的表单。