Odoo模型的內置方法(可按需重寫)


轉載請注明原文地址:https://www.cnblogs.com/ygj0930/p/10826222.html

 

==========模型層面==========

一:_table_exist

        檢查該模型對於的數據庫表是否存在,是則返回1,否則返回0.

@api.model_cr
    def _table_exist(self): pass

 

==========模型記錄層面==========

二:create(self,vals)

         記錄的創建函數,一般情況下,是根據視圖傳過來的dict對象,生成模型記錄。

         我們可以重寫create方法:1)獲取vals參數,從中提前數據進行校驗、替換;

                                             2)調用super(類,self).create(new_vals) 把新的dict作為參數執行記錄創建。

 

三:write(self,vals)

         記錄的修改函數,很少重寫,參數也是dict。

         

四:read(self,fields)

        記錄的查看函數,參數是查看哪些字段,默認是全字段,很少重寫。

 

五:unlink(self)

         記錄的刪除函數,參數是當前數據記錄集。一般重寫該函數,校驗記錄的狀態等,限制某些記錄不能被刪除。

 

六:_search(self, args, offset=0, limit=None, order=None, count=False, access_rights_uid=None)

         模型記錄的搜索函數,定義了該模型的記錄被關聯搜索、搜索視圖搜索時的條數、排序字段、總數、檢索權限等。

 

七:name_get()

     name_get()函數定義了該模型的記錄在被關聯、搜索時,所顯示出來的名字,默認是使用name字段的值。

     如果我們想自定義該模型的記錄顯示的名稱,例如:使用 編碼+name字段 顯示的復合名稱,則可以重寫name_get()函數:

    @api.multi
    @api.depends('用於拼接名稱字段', 'name') def name_get(self): """ 名稱顯示格式。 """ new_name = self.用於拼接名稱字段 + self.name return [(self.id,new_name)]

 

八:name_search()

        name_get()定義了記錄如何顯示,那么name_search()則定義了記錄如何被查找。

        name_search()定義了模型記錄在被關聯、被搜索時,通過輸入的內容進行模糊查找的邏輯。

        默認情況下,是通過查找記錄的 name  字段值是否與輸入內容類似進行比對查找,我們可以改寫模型的name_search()函數,把更多的字段加入比對中去。

    @api.model
    def name_search(self, name, args=None, operator='ilike', limit=查找條數): """ 名稱模糊搜索。 """ args = args or [] domain = [] domain.append([(更多檢索條件)]) return super(類名, self).name_search(name, domain + args, operator=operator, limit=limit)

        或直接查找,返回所得記錄集的name_get:

@api.model
def  name_search(self,name='',args=None,operator='ilike',limit=100): args = args or [] domain = [] if name: domain = ['|',('name',operator,name),('其他比對字段',operator,name)] pos = self.search(domain + args,limit=limit) //使用擴展后的條件進行查找 return pos.name_get() //把查找結果的name返回

 

九:default_get()

        default_get(fields) 函數用於初始化記錄的默認值,對於模型的某些字段如果需要設置默認值,可以重寫模型的default_get()函數達到目的。

        例如:從表單中攜帶上下文信息跳轉到向導、跳轉到一個模型的新建表單視圖等,可以在跳轉時往context傳遞數據,然后在向導模型、被跳轉創建的模型中重寫default_get方法,從context中提前信息,進行字段默認值的初始化。

    @api.model
    def default_get(self, default_fields): result = super(類名, self).default_get(default_fields) context_data = self.env.context.get('key') //根據context_data進行相關數據查詢、處理操作 result.update({'字段': 默認值}) //更改記錄的字段默認值 return result

 

十:name_create(name)

        相當於只傳遞name字段值,調用create方法創建一條新記錄。

 

十一:fields_get

        字段查詢函數,一般不重寫:以數據字典的形式返回字段的定義,通過繼承得來的字段也會在其中,string/help/selection屬性會自動被翻譯

fields_get([fields],[attributes]):
    fields參數是字段列表、為空或不傳返回所有字段
    attributes 可指定字段的屬性、為空或不傳時返回全部的

 

==========視圖信息層面==========

十二:fields_view_get

        視圖查詢函數,一般不重寫:返回指定視圖的具體組成如:字段,所關聯的模型,視圖結構。

fields_view_get():
    view_id 視圖的id或None
    view_type 當view_id參數為空時指定視圖類型如form,tree等
    toolbar 參數為true時將上下文動作包含在內

 

十二:get_formview_action

       表單視圖獲取函數,可以重寫該函數,使模型加載某個特定的form視圖,甚至可以在加載時傳遞context值,控制視圖的行為。

 

十三:load_views(views,options)

        視圖加載函數,可以重寫該函數,在加載視圖時傳遞context值,控制視圖行為。

 


免責聲明!

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



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