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 - +