Django 1.2: 管理表单中的日期与区域设置不兼容 (I10N=True)
我有一个用Django 1.2做的应用程序。
这个应用支持选择语言(国际化和地区设置 = 真)。
当我在网站上选择英语时,管理员功能正常。但当我切换到其他语言时,日期输入框就出现问题了(以西班牙语为例):
输入框可以正确接受西班牙的日期格式 %d/%m/%Y
(即使是从日历选择,日期也能按预期插入)。但是当我保存表单并再次加载时,日期却显示成了英语格式:%Y-%m-%d
。
真正的问题是,当我加载表单想要修改其他文本字段并尝试保存时,系统会提示我输入一个有效的日期,所以我必须重新输入所有日期,或者把网站语言改回来才能使用管理员功能。
我在设置中没有指定任何关于DATE_INPUT_FORMATS的内容,也没有重写表单或模型。
我肯定是漏掉了什么,但我找不到。有没有人能给我点提示?
1 个回答
2
把这个加到你的设置里应该能解决你所说的“真正的问题”:
DATE_INPUT_FORMATS = (
'%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06'
'%Y-%m-%d', '%y-%m-%d', # '2006-10-25', '06-10-25'
)
DATETIME_INPUT_FORMATS = (
'%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59'
'%d/%m/%Y %H:%M', # '25/10/2006 14:30'
'%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59'
'%d/%m/%y %H:%M', # '25/10/06 14:30'
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
'%Y-%m-%d', # '2006-10-25'
)
不过,这其实是Django的问题。我在这个链接上提交了一个问题,但你也应该去评论一下,因为你的例子显示这个问题比我想的还要严重(因为结果发现并不是所有的本地化都能接受“通用”和“本地化”的日期输入格式)。
更新:我忘了补充,你可以给你的日期控件加上localize=True
,这样它们就应该总是以本地化的格式显示日期。关于如何做到这一点,有一些例子可以在这个错误报告里找到。
我刚刚在django-developers邮件列表上发了一条关于这个问题的消息。