You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Odoo 15 QWeb报表及应付支票表单中自定义日期格式

在Odoo 15中设置固定日期格式(不受系统语言/当前日期影响)

一、QWeb报表中的实现

在QWeb报表里,直接利用context_timestamp将业务数据中的日期字段转换为用户时区的datetime对象,再通过strftime指定固定格式即可,完全不受系统语言设置影响。

代码示例

假设你的应付支票模型中有一个业务日期字段check_date,在QWeb报表中这样写:

<!-- 替换o.check_date为你实际使用的日期字段 -->
<span t-esc="context_timestamp(o.check_date).strftime('%m-%d-%Y')"/>

说明

  • context_timestamp(o.check_date):将Odoo存储的UTC日期时间转换为当前用户时区的datetime对象,避免时区偏移问题。
  • strftime('%m-%d-%Y'):指定固定格式,这里是月-日-年,你可以根据需求修改格式字符串(比如%Y-%m-%d表示年-月-日)。
  • 不要使用datetime.datetime.now(),直接替换为业务数据中的目标日期字段(如支票出票日、到期日等),满足“不使用当前实际日期”的要求。

二、应付支票表单视图中的实现

如果需要在表单视图中也显示固定格式的日期,有两种常用方式:

方式1:添加计算字段(推荐)

在应付支票模型中新增一个计算字段,返回格式化后的日期字符串,不受系统语言影响。

模型层代码

from datetime import datetime
import pytz
from odoo import models, fields, api

class AccountCheckPrinting(models.Model):
    _inherit = 'account.check.printing'  # 替换为你实际的应付支票模型

    formatted_check_date = fields.Char(string='格式化支票日期', compute='_compute_formatted_check_date')

    @api.depends('check_date')
    def _compute_formatted_check_date(self):
        user_tz = pytz.timezone(self.env.user.tz) if self.env.user.tz else pytz.utc
        for rec in self:
            if rec.check_date:
                # 将UTC日期转换为用户时区后格式化
                local_dt = rec.check_date.astimezone(user_tz)
                rec.formatted_check_date = local_dt.strftime('%m-%d-%Y')
            else:
                rec.formatted_check_date = ''

视图层配置

在应付支票的表单视图中,添加或替换字段显示:

<field name="formatted_check_date" readonly="1"/>

方式2:表单打印时的格式控制

如果只是打印表单时需要固定格式,直接沿用QWeb报表的处理方式即可,在打印模板中使用前面的QWeb代码。

注意事项

  • 格式字符串支持多种占位符,比如%d(两位日)、%m(两位月)、%Y(四位年)、%H(24小时制时)等,按需组合即可。
  • 若需要显示中文月份/星期,不要依赖strftime的本地化输出(会受系统语言影响),建议手动映射月份名称,比如通过字典转换:
    month_map = {1:'一月', 2:'二月', ..., 12:'十二月'}
    formatted_date = f"{month_map[local_dt.month]} {local_dt.day}日, {local_dt.year}年"
    

内容的提问来源于stack exchange,提问作者zzaren 009

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:05:08