2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
你可以通過(guò) munkey patching 來(lái)做到這一點(diǎn),但我真的不建議這樣做,你應(yīng)該做的是創(chuàng)建一個(gè)小模塊來(lái)執(zhí)行此操作并確保所有其他模塊都依賴(lài)于它,這樣對(duì)檢查的調(diào)用將是只做過(guò)一次。
請(qǐng)放心,當(dāng)您在兩個(gè)模塊中重復(fù)代碼時(shí),請(qǐng)考慮將其提取到一個(gè)小模塊中,并確保這兩個(gè)模塊依賴(lài)于它。
就像您的情況一樣,您可以創(chuàng)建模塊,check_license
將所有相關(guān)代碼放入此操作中,修復(fù)對(duì)其他 30 個(gè)模塊的依賴(lài)關(guān)系,這將確保當(dāng)您安裝其中一個(gè)模塊時(shí),將首先安裝新模塊,主要好處是調(diào)用即使您安裝了所有 30 個(gè)模塊,檢查許可證也只會(huì)發(fā)生一次

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
我看到兩種簡(jiǎn)單的可能性:
1.Odoo繼承的使用
Odoo的繼承機(jī)制也在基礎(chǔ)模型上發(fā)揮著作用。以下示例來(lái)自 Odoo V13 模塊base_import,但在 Odoo V11 中也有一些示例(例如在 中web):
class Base(models.AbstractModel):
_inherit = 'base'
@api.model
def get_import_templates(self):
"""
Get the import templates label and path.
:return: a list(dict) containing label and template path
like ``[{'label': 'foo', 'template': 'path'}]``
"""
return []
以下是您需要的代碼(在更高版本中不起作用,因?yàn)閏reate已更改):
class Base(models.AbstractModel):
_inherit = 'base'
def create(self, values):
"""
Extended core method to implement a license check,
before creating a record.
"""
check_license(self)
return super().create(values)
2.使用mixin(Odoo代碼中有很多例子)
可以使用 mixin 類(lèi)來(lái)限制某些模型的許可證檢查,這些模型將繼承此 mixin。1. 概念并不限制它(但它也是可能的)。
class LicenseCheckMixin(models.AbstractModel):
_name = 'license.check.mixin'
def create(self, values):
"""
Extended create method to implement a license check,
before creating a record.
"""
check_license(self)
return super().create(values)
然后你可以在其他 Odoo 模型中繼承這個(gè) mixin:
class SaleOrder(models.Model):
_name = 'sale.order'
_inherit = ['sale.order', 'license.check.mixin']
- 2 回答
- 0 關(guān)注
- 234 瀏覽
添加回答
舉報(bào)