diff --git a/app_mixin_name_en/__init__.py b/app_mixin_name_en/__init__.py
index 0190a7f5..63a26a5a 100644
--- a/app_mixin_name_en/__init__.py
+++ b/app_mixin_name_en/__init__.py
@@ -5,4 +5,4 @@ from .hooks import post_init_hook
from . import controllers
from . import models
from . import ir
-from . import res
\ No newline at end of file
+from . import res
diff --git a/app_mixin_name_en/__manifest__.py b/app_mixin_name_en/__manifest__.py
index c109b2a3..dce09428 100644
--- a/app_mixin_name_en/__manifest__.py
+++ b/app_mixin_name_en/__manifest__.py
@@ -45,7 +45,7 @@
'live_test_url': 'https://demo.odooapp.cn',
'license': 'OPL-1',
'sequence': 2,
- 'price': 98.00,
+ 'price': 18.00,
'currency': 'EUR',
'images': ['static/description/banner.png'],
'summary': '''
diff --git a/app_mixin_name_en/models/mixin_name_en.py b/app_mixin_name_en/models/mixin_name_en.py
index 5dce7d4b..34b09ca9 100644
--- a/app_mixin_name_en/models/mixin_name_en.py
+++ b/app_mixin_name_en/models/mixin_name_en.py
@@ -13,44 +13,58 @@ class MixinNameEn(models.AbstractModel):
# name_en_US 只要某个模型有此字段,且放在界面上,就会进行此处理
# 无此字段不处理
-
- name_en_US = fields.Char('English Name')
-
- # 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
+ # 注意 res.partner 是很特殊的,继承太多,故不能用 translate=True
+ # 注意不能用在有继承的模型
+
+ name_en_US = fields.Char('English Name', compute='_compute_name_en_US', inverse='_inverse_name_en_US', store=True)
+
+ @api.depends('name')
+ def _compute_name_en_US(self):
+ self = self.with_context(lang='en_US')
+ for rec in self:
+ rec.name_en_US = rec.name
+
+ def _inverse_name_en_US(self):
+ for rec in self:
+ rec.with_context(lang='en_US').write({
+ 'name': rec.name_en_US
+ })
+
+ # # 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
diff --git a/app_mixin_name_en/models/res_partner.py b/app_mixin_name_en/models/res_partner.py
index 26ea8278..7bafe600 100644
--- a/app_mixin_name_en/models/res_partner.py
+++ b/app_mixin_name_en/models/res_partner.py
@@ -5,6 +5,13 @@ from odoo.exceptions import UserError, ValidationError
class ResPartner(models.Model):
- _name = 'res.partner'
+
+ _inherit = 'res.partner'
- _inherit = ['res.partner', 'mixin.name.en']
+ # todo: name 不能做多语种处理,使用高频,会太耗费性能
+ # 注意 res.partner 是很特殊的,继承太多,故不能用 translate=True
+ # name = fields.Char(translate=True)
+
+ name_en_US = fields.Char('English Name')
+
+
diff --git a/app_mixin_name_en/views/res_partner_views.xml b/app_mixin_name_en/views/res_partner_views.xml
index 3832fad5..45b386a0 100644
--- a/app_mixin_name_en/views/res_partner_views.xml
+++ b/app_mixin_name_en/views/res_partner_views.xml
@@ -8,7 +8,7 @@
res.partner
-
+