gpt4 book ai didi

python - 如何在 Odoo 日期时间字段中显示不同的日期格式?

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:11 26 4
gpt4 key购买 nike

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

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

<field name="pickup_time"/>

我已经搜索了很多以找到如何更改格式,但它主要是在本地设置中进行更改,而且它是永久性的一个设置,适用于任何地方。这不能解决我们想要的问题,例如为不同的地方使用两种不同的格式。

最佳答案

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"/>

关于python - 如何在 Odoo 日期时间字段中显示不同的日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47890399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com