如何从OpenERP中移除日期异常?

2 投票
2 回答
652 浏览
提问于 2025-04-17 06:59

我正在研究OpenERP网页,想找出怎么去掉日期的限制。比如,我想输入一个日期,比如12/12/1523。现在的功能是,如果我输入一个早于1900的日期,它会给我显示错误信息。我查看了_calender.py、format.py和validates.py这些文件,但没有成功。如果这里有人能帮我解决这个问题,我会非常感激。

2 个回答

0

当我输入1523年的日期时,出现的错误信息是:

无效的日期时间值!年份必须大于1899年!

如果你在客户端代码中搜索这个错误信息,你会在这个链接中找到相关内容:client/bin/widget/view/form_gtk/calendar.py

try:
    return date.strftime(DHM_FORMAT)
except ValueError:
    common.message(_('Invalid datetime value! Year must be greater than 1899 !'))

如果你查看关于date.strftime()的文档,你会看到以下内容:

strftime()函数能处理的年份范围在不同的平台上也有所不同。无论在哪个平台上,1900年之前的年份都不能使用。

在谷歌上搜索“python strftime 1900”会找到一个问题,里面有补丁和很多讨论。看起来你有几个选择:

  1. 不要使用1900年之前的日期。
  2. 修改日历模块,自己实现一个格式化的函数,而不是用strftime()
  3. 升级到Python 3.2或3.3版本。(查看问题报告,了解每个版本修复了什么。)
  4. 将补丁应用到你自己的Python版本上。
3

我在openerp-web中发现了两个问题:

1 - 日期选择器的日历有限制,不能选择早于

01/01/1900

2 - 在尝试保存时,openerp/i18n/format.py会出现验证错误

关于第一个问题,可以很容易地在

openerp/static/calandar/calendar.js

=> find:

    param_default("range",[1900,2999])

=> and replace with:

    param_default("range",[1,2999])

关于第二个问题,替换在

openerp/i18n/format.py

=> find the two occurances of:

    return time.strftime(server_format, value)

=> and replace with:

    return mx.DateTime.Date(value[0],value[1],value[2],value[3],value[4],value[5]).strftime(server_format)

撰写回答