iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
Odoo

Odoo 16 入門介紹系列 第 9

Environment 跟 record 介紹

  • 分享至 

  • xImage
  •  

Environment

  1. env:這是一個環境物件,它讓您訪問不同上下文資訊,像使用者、語言、公司等。

  2. self.env.user:這讓您從環境中取得當前使用者的資訊,例如名稱、角色。

  3. self.env['res.partner']:這讓您在環境中取得「res.partner」這個模型,通常代表合作夥伴,像客戶或供應商。

  4. self.env.lang:這讓您得知當前語言設定,特別在多語言應用程式中有用。

  5. self.env.company:這讓您知道目前所在的公司,特別在支援多公司的情境下有用。

  6. self.env.companies:這列出使用者可以訪問的所有公司,特別是在多公司情境下有用。

@api 裝飾器在Odoo框架中是用來定義模型方法的一個重要工具,它可以用來實現不同類型的功能。其中一個常見的用途是為了提高資料庫效能,以及在操作記錄集(recordset)時確保適當的上下文。以下是一些常見的內建CRUD(創建、讀取、更新、刪除)操作和其他操作:

  1. read([]):@api 裝飾器可用於自定義 read 方法,以根據您的需求定制讀取記錄的邏輯。這對於檢索記錄的特定字段或執行特定計算很有用。通常,@api 中的 @api.depends 裝飾器可用於確保當相關字段發生變化時,相應的 read 方法被自動觸發。

  2. create({}):使用 @api 裝飾器,您可以自定義 create 方法,以便在創建新記錄時執行額外的邏輯。這可用於檢驗或處理要創建的數據,然後進行創建操作。

  3. write({}):write 方法是用來自定義記錄更新的邏輯的地方。您可以使用 @api 裝飾器來定義此方法,以便在更新記錄時執行特定的操作,例如驗證、歷史記錄等。

  4. unlink():unlink 方法用於自定義記錄刪除的邏輯。您可以使用 @api 裝飾器來定義此方法,以執行額外的操作,例如確保不允許刪除某些記錄,或者執行刪除之前的清理操作。

  5. browse(int):@api.model 裝飾器可用於自定義模型的 browse 方法,以根據給定的記錄ID檢索記錄。這可以用來執行自定義的查詢邏輯。

  6. search():search 方法通常不需要 @api 裝飾器,但您可以使用它來自定義自己的搜索邏輯,以根據特定條件查找記錄。它可以返回一個記錄集,以供後續操作使用。

當我們想使用其他model的recordset的時候,我們可以這樣做:

def other_recordset(self):
    all_members=self.env['library.member'].search([])
    print("All members:",all_members)
    return True

或是我們想要創建一個新record:

record=self.evn['library.book.category'].create(parent_category_val)

還可以更新record:

def update_record(self):
    self.ensure_one()
    self.date_release=fields.Date.today()
------------------------------------------
def update_record(self):
    self.ensure_one()
    self.update({'date_release':'fields.Date.today()'})

我們也可以透過write({})來對record的操作

record.write({'child_ids':[0,0,child]})
record.write({'child_ids':[1,child_index,update_child]})

這邊詳細介紹這些( , , )內所代標的意思

(0,0,{})   -創建record
(1,id,{})  -更新record
(2,id)     -刪除record
(3,id)     -解除record關聯
(4,id)     -關聯record
(5,)       -刪除所有關聯record
(6,0,[])   -替換關聯record

上一篇
@api 種類跟介紹
下一篇
odoo 報錯種類跟方法
系列文
Odoo 16 入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言