2 回答

TA貢獻1815條經驗 獲得超10個贊
你可以通過 munkey patching 來做到這一點,但我真的不建議這樣做,你應該做的是創建一個小模塊來執行此操作并確保所有其他模塊都依賴于它,這樣對檢查的調用將是只做過一次。
請放心,當您在兩個模塊中重復代碼時,請考慮將其提取到一個小模塊中,并確保這兩個模塊依賴于它。
就像您的情況一樣,您可以創建模塊,check_license
將所有相關代碼放入此操作中,修復對其他 30 個模塊的依賴關系,這將確保當您安裝其中一個模塊時,將首先安裝新模塊,主要好處是調用即使您安裝了所有 30 個模塊,檢查許可證也只會發生一次

TA貢獻1777條經驗 獲得超10個贊
我看到兩種簡單的可能性:
1.Odoo繼承的使用
Odoo的繼承機制也在基礎模型上發揮著作用。以下示例來自 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 []
以下是您需要的代碼(在更高版本中不起作用,因為create已更改):
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 類來限制某些模型的許可證檢查,這些模型將繼承此 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 模型中繼承這個 mixin:
class SaleOrder(models.Model):
_name = 'sale.order'
_inherit = ['sale.order', 'license.check.mixin']
- 2 回答
- 0 關注
- 221 瀏覽
添加回答
舉報