【问题标题】:How to display different date formats in Odoo datetime fields?如何在 Odoo 日期时间字段中显示不同的日期格式?
【发布时间】:2017-12-19 15:39:08
【问题描述】:

目前我们的 Odoo CRM 上的日期格式看起来像 11/20/2017 13:03:41,但我想将格式显示为 July 3rd 3:00PM,而在另一个地方显示为 3 Jul 3:00PM

我们在表单中显示这个字段

<field name="pickup_time"/>

我已经搜索了很多以找到如何更改格式,但这主要是更改本地设置,并且它永远是一个无处不在的设置。这不能解决我们想要的问题,比如在不同的地方有两种不同的格式。

【问题讨论】:

  • 你可以创建一个你想要的格式的计算域
  • 计算字段?通过编码?如果通过编码,是否有任何样本...
  • 是的,需要在python中声明。检查 Odoo 文档
  • 如果我有时间我会用代码写一个答案
  • @ChesuCR — 好的,非常感谢。

标签: python datetime odoo odoo-11


【解决方案1】:

在 Odoo 中,使用的默认常量日期格式是 DEFAULT_SERVER_DATETIME_FORMAT。这是在文件misc.py中定义的

DEFAULT_SERVER_DATE_FORMAT = "%Y-%m-%d"
DEFAULT_SERVER_TIME_FORMAT = "%H:%M:%S"
DEFAULT_SERVER_DATETIME_FORMAT = "%s %s" % (
    DEFAULT_SERVER_DATE_FORMAT,
    DEFAULT_SERVER_TIME_FORMAT)

因此,如果您像以下代码一样声明该字段,则将使用该常量:

pickup_time = fields.Datetime(
    string="Pickup time",
)

因此,如果您想使用其他格式,您可以使用该自定义格式创建计算域。您需要使用一些日期函数:strftime(对象到字符串)和strptime(字符串到对象)。格式代码几乎在this python documentation page底部都有解释

from datetime import datetime
from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT

[...]

pickup_time_formated = fields.Char(   # it is going to be a readonly field
    string='Pickup time formated',
    compute='_compute_pickup_time_formated'
)

@api.multi
@api.depends('pickup_time')
def _compute_pickup_time_formated(self):
    for record in self:
        date = record.pickup_time
        date_obj = datetime.strptime(date, DEFAULT_SERVER_DATETIME_FORMAT)   # to convert it in a date object

        v = date_obj.day % 10           # to get the remainder of the operation
        if v == 1:
            ordinal_suffix = 'st'
        elif v == 2:
            ordinal_suffix = 'nd'
        elif v == 3:
            ordinal_suffix = 'rd'
        else:
            ordinal_suffix = 'th'

        # format 'July 3rd 3:00PM'
        record.pickup_time_formated = datetime.strftime(date_obj, '%B %d' + ordinal_suffix + ' %I:%M %p')

        # format '3 Jul 3:00PM'
        # record.pickup_time_formated = datetime.strftime(date_obj, '%d %b %I:%M %p'),

然后你就可以在xml表单中显示新的字段了:

<field name="pickup_time_formated"/>

【讨论】:

  • 这么多?没有办法将格式选项传递给字段小部件?
  • 我不这么认为@mangatinanda,至少在我写答案的时候。如果您找到更好的方法,请告诉我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 2015-03-19
  • 2019-11-08
  • 1970-01-01
相关资源
最近更新 更多