轉載請注明原文地址: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值,控制視圖行為。