第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何重寫(xiě)odoo11中的主要?jiǎng)?chuàng)建方法?

如何重寫(xiě)odoo11中的主要?jiǎng)?chuàng)建方法?

PHP
狐的傳說(shuō) 2023-11-09 10:44:33
我有很多模型(大約 30 個(gè))會(huì)重寫(xiě) create 方法來(lái)檢查許可證狀態(tài),所有模型都是這樣的:class Model1(models.Model):    _name='testing_model1'    @api.model    def create(self)        check_license(self)        return super(Model1, self).create(values)有沒(méi)有辦法在主創(chuàng)建中添加“check_license”函數(shù),這樣我就不必在每個(gè)模型中都編寫(xiě)它?
查看完整描述

2 回答

?
動(dòng)漫人物

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ā)生一次


查看完整回答
反對(duì) 回復(fù) 2023-11-09
?
不負(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']


查看完整回答
反對(duì) 回復(fù) 2023-11-09
  • 2 回答
  • 0 關(guān)注
  • 234 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)