Odoo 14 QWeb报告通过IP/域名访问时时间显示异常,localhost访问正常
Odoo 14 不同访问方式下QWeb报告时间偏差原因及解决方案
核心原因
- 时区上下文匹配异常
Odoo渲染时间时会优先读取会话绑定的时区参数,localhost访问时默认继承服务器本地时区配置,而通过IP/域名访问时如果会话未正确加载时区参数,会默认使用UTC时间,和实际时区的差值就是你看到的时间偏差。 - 反向代理请求头丢失
如果域名/IP访问是通过Nginx、Apache等反向代理转发到Odoo服务,若代理未正确传递X-Forwarded-*系列请求头,Odoo无法识别当前访问的上下文信息,会默认使用UTC时间渲染QWeb报告。 - 用户账户时区配置不一致
检查当前登录账户的时区设置:进入设置 -> 技术 -> 用户界面 -> 用户,打开对应用户详情页确认时区参数。localhost访问时可能使用了已配置正确时区的管理员账户,外部访问时登录的是未配置时区的普通账户,导致时间渲染基准不同。 - QWeb模板时间取值逻辑错误
自定义QWeb报告如果直接使用datetime.now()这类原生方法取服务器时间,没有调用Odoo封装的fields.Datetime.context_timestamp()方法做时区转换,不同访问上下文的会话参数差异会导致时间输出不一致。
修复方案
- 修改Odoo配置文件(通常为odoo.conf),添加/修改
timezone参数为你所在的时区,国内环境示例:
timezone = Asia/Shanghai
修改后重启Odoo服务生效。
- 反向代理配置中添加请求头传递规则,Nginx示例配置:
location / { proxy_pass http://127.0.0.1:8069; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; }
- 统一所有业务用户的时区配置,确保和实际使用地区时区一致。
- 修正QWeb报告模板的时间渲染逻辑,统一使用带时区转换的方法渲染时间字段,示例:
<!-- 错误写法 --> <t t-esc="datetime.now()"/> <!-- 正确写法 --> <t t-esc="fields.Datetime.context_timestamp(record, record.create_date)"/>
内容的提问来源于stack exchange,提问作者Omeed Totakhel
相关产品推荐
相关产品推荐

