在 Django ModelForm 中本地化 DateField 输出格式

pro*_*nte 2 django django-forms

运行 Django 1.4.10。尝试在模型表单中设置日期本地化。阅读文档,这似乎只是在 ModelForm 中的字段上设置 localize=True 属性,并在设置中打开本地化的情况。所以,我这样做:

my_field = DateField(localize=True)
Run Code Online (Sandbox Code Playgroud)

在我的表单中,在设置中:

USE_L10N = True
Run Code Online (Sandbox Code Playgroud)

然后我们愉快地进入表格,它部分起作用了。输入格式已本地化,因此对于北美,它显示:

"m/d/y"
Run Code Online (Sandbox Code Playgroud)

但是,当您第一次加载表单时,初始输出格式是默认的:

"y-m-d"
Run Code Online (Sandbox Code Playgroud)

根据文档,输出本地化应该和输入本地化一样工作。我究竟做错了什么?

pro*_*nte 5

好的,在这里回答我自己的问题,因为我已经成功了。您还需要为小部件提供区域设置格式,以便对输出进行格式化。我认为这是 Django 中的一个错误。无论如何,该字段现在变为:

from django.utils import formats, translation

locale_format = formats.get_format('DATE_INPUT_FORMATS', lang=translation.get_language())[-1]
my_field = DateField(localize=True, widget=DateInput(format=locale_format))
Run Code Online (Sandbox Code Playgroud)

locale_format 列表中的最后一项返回短日期格式区域设置。不知道为什么它会这样做。