目前我们的 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
(字符串到对象)。格式代码几乎在此 python 文档页面的底部进行了解释
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"/>