Django 1.2: 管理表单中的日期与区域设置不兼容 (I10N=True)

2 投票
1 回答
1047 浏览
提问于 2025-04-15 23:17

我有一个用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邮件列表上发了一条关于这个问题的消息

撰写回答