update misc

This commit is contained in:
Ivan Office
2023-09-13 04:18:03 +08:00
parent 4f1539c2a1
commit d911f67b15
5 changed files with 67 additions and 46 deletions

View File

@@ -45,7 +45,7 @@
'live_test_url': 'https://demo.odooapp.cn', 'live_test_url': 'https://demo.odooapp.cn',
'license': 'OPL-1', 'license': 'OPL-1',
'sequence': 2, 'sequence': 2,
'price': 98.00, 'price': 18.00,
'currency': 'EUR', 'currency': 'EUR',
'images': ['static/description/banner.png'], 'images': ['static/description/banner.png'],
'summary': ''' 'summary': '''

View File

@@ -13,44 +13,58 @@ class MixinNameEn(models.AbstractModel):
# name_en_US 只要某个模型有此字段,且放在界面上,就会进行此处理 # name_en_US 只要某个模型有此字段,且放在界面上,就会进行此处理
# 无此字段不处理 # 无此字段不处理
# 注意 res.partner 是很特殊的,继承太多,故不能用 translate=True
# 注意不能用在有继承的模型
name_en_US = fields.Char('English Name') name_en_US = fields.Char('English Name', compute='_compute_name_en_US', inverse='_inverse_name_en_US', store=True)
# todo: 以下处理方式不同最好直接做一个widget @api.depends('name')
# 非开发者模式时,能显示出非英文时值,并可点击改多语种。 def _compute_name_en_US(self):
# 将原 widget加 options 处理 self = self.with_context(lang='en_US')
@api.model_create_multi for rec in self:
def create(self, vals_list): rec.name_en_US = rec.name
res = super(MixinNameEn, self).create(vals_list)
if self.env.lang == 'en_US':
return res
# todo: 这里已为了提高性能不检查。不需检查当前odoo是否有英文没英文就不给安装此模块。同时也不检查条件 def _inverse_name_en_US(self):
# if name_field and name_field.translate and name_field.type in ["char", "text"]: for rec in self:
# # todo: 符合条件,后续为提高性能,无需做此判断 rec.with_context(lang='en_US').write({
# pass 'name': rec.name_en_US
# else: })
# # todo: 以下处理方式不同最好直接做一个widget
# # 非开发者模式时,能显示出非英文时值,并可点击改多语种。
# # 将原 widget加 options 处理
# @api.model_create_multi
# def create(self, vals_list):
# res = super(MixinNameEn, self).create(vals_list)
# if self.env.lang == 'en_US':
# return res
#
# # todo: 这里已为了提高性能不检查。不需检查当前odoo是否有英文没英文就不给安装此模块。同时也不检查条件
# # if name_field and name_field.translate and name_field.type in ["char", "text"]:
# # # todo: 符合条件,后续为提高性能,无需做此判断
# # pass
# # else:
# # return res
# # 处理写 en
# for index, vals in enumerate(vals_list):
# name_en_US = vals.get('name_en_US')
# if name_en_US:
# try:
# res[index].with_context(lang='en_US').write(dict(name=name_en_US))
# except Exception as e:
# _logger.error('============== name_en mixin create error from name_en_US: %s' % str(e))
# return res
#
# def write(self, vals):
# res = super(MixinNameEn, self).write(vals)
# if self.env.lang == 'en_US':
# return res
#
# name_en_US = vals.get('name_en_US')
# name = vals.get('name')
# if name_en_US:
# try:
# self.with_context(lang='en_US').write(dict(name=name_en_US))
# except Exception as e:
# _logger.error('============== name_en mixin write error:%s' % str(e))
# return res # return res
# 处理写 en
for index, vals in enumerate(vals_list):
name_en_US = vals.get('name_en_US')
if name_en_US:
try:
res[index].with_context(lang='en_US').write(dict(name=name_en_US))
except Exception as e:
_logger.error('============== name_en mixin create error from name_en_US: %s' % str(e))
return res
def write(self, vals):
res = super(MixinNameEn, self).write(vals)
if self.env.lang == 'en_US':
return res
name_en_US = vals.get('name_en_US')
name = vals.get('name')
if name_en_US:
try:
self.with_context(lang='en_US').write(dict(name=name_en_US))
except Exception as e:
_logger.error('============== name_en mixin write error:%s' % str(e))
return res

View File

@@ -5,6 +5,13 @@ from odoo.exceptions import UserError, ValidationError
class ResPartner(models.Model): class ResPartner(models.Model):
_name = 'res.partner'
_inherit = ['res.partner', 'mixin.name.en'] _inherit = 'res.partner'
# todo: name 不能做多语种处理,使用高频,会太耗费性能
# 注意 res.partner 是很特殊的,继承太多,故不能用 translate=True
# name = fields.Char(translate=True)
name_en_US = fields.Char('English Name')

View File

@@ -8,7 +8,7 @@
<field name="model">res.partner</field> <field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/> <field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='type']" position="after"> <xpath expr="//span[@name='address_name']" position="before">
<!-- todo: 在英文环境不显示xml中可以直接调 env。或者是在原widget中加options如果无值时则显示同样的 name--> <!-- todo: 在英文环境不显示xml中可以直接调 env。或者是在原widget中加options如果无值时则显示同样的 name-->
<field name="name_en_US" place_holder="Default same as name, Input to set other"/> <field name="name_en_US" place_holder="Default same as name, Input to set other"/>
</xpath> </xpath>