如何在Odoo創建新數據的時候添加自己的方法 - 重寫create方法


相信有一些小伙伴在使用odoo的時候,需要在創建數據的同時給一些數據自動賦值,雖然在使用onchange方法也基本可以實現需求,但是總是在一些特色的想法的onchange是不能滿足需求的。

odoo自帶的create方法是默認創建數據模型的方法,我們需要如果我們修改他就直接重寫它的方法即可。

直接上栗子

  • 先簡單創建一個模型(這步學了odoo基本框架應該都懂)。
class FandxStock(models.Model):
    _name = "fandx.stock"

    name = fields.Char("商品名稱")
    nums = fields.Integer("數量")
  • 簡單說個想法,當創建stock的時候,如果數量>10就在name的后面加上一些字符串。
class FandxStock(models.Model):
    _name = "fandx.stock"

    name = fields.Char("商品名稱")
    nums = fields.Integer("數量")
    
    @api.model_create_multi
    def create(self, vals_list):
        # 創建數據之前做的操作
        # ....
        # 調用父級方法創建數據對象
        fandx_stock_instance = super(FandxStock, self).create(vals_list)
        # 創建數據之后做的操作
        for instance in fandx_stock_instance:
            # 因為這里創建的是數據集對象,所以我們要循環取出所有數據進行處理
            # 如果想創建單個數據使用@api.model
            if instance.nums > 10:
                # 這是直接調用屬性賦值會自動調用write方法來重寫數據
                instance.name = "fandx" + instance.name
        
        # 最后注意一定要返回創建的對象
        return fandx_stock_instance
        

總結

  1. odoo可以重寫create來重寫創建方法,同時也可以重寫其他方法實現別的操作
    1. search() - 查詢
    2. write() - 修改
    3. unlink() - 刪除
  2. 使用的時候一定要使用@api.model裝飾器,具體可以去看父類是否使用了裝飾器,比如unlink就不需要使用@api.model裝飾器
  3. @api.model裝飾器是一條數據,而@api.model_create_multi是創建多條數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM