odoo中self的使用

2021-08-19 01:20:10 字數 2046 閱讀 8970

一:self是什麼

目前新版的odoo中使用到的self,是對  游標cr、使用者id、模型、上下文、記錄集、快取  的封裝。

我們可以通過 self.xx 獲取到這些封裝的東西,比如:self.cr、self.uid。

二:通過直接設定屬性來改變資料庫中字段值

我們在查出某模型的記錄後,可以通過  record.xx = value  來直接修改記錄的字段內容。

同樣,在重寫模型的write方法中,也可以通過 self.xx = value 來指定新增記錄中某字段的值。

這裡需要注意兩點:

1:修改查出來的記錄欄位值來改變資料庫內容,是通過改變快取中的值出發資料庫寫記錄來達到的。

2:重寫write方法時,在write方法中每呼叫一次 self.xx = value 語句,都會觸發資料庫寫操作,因此一般採用:

for rec in self:

rec.xx = xx

的寫法。

三:環境

1:操作快取

環境儲存了模型的快取記錄集,因此我們可以通過環境來獲取、增加、修改、刪除記錄,而觸發資料庫更改,從而達到運算元據庫的目的。

例如:新增一條記錄

self.env['模型'].create(vals)

2:改變使用者許可權

我們可以通過self.sudo()獲得超級許可權,從而確保我們的操作能夠進行。

self.env[『model'].sudo().create(vals)

3:訪問當前使用者

self.env.user

4:獲取xml的id

self.env.ref('external id')

5:更新快取,觸發資料庫操作

self.env.invalidate_all()

四:self常用介面

1:普通查詢:返回記錄集,後續通過修改記錄值來觸發資料庫修改

self.search(domain) //從當前模型的self中查詢

self.env['model'].search(domain) // 獲取某個model的環境,查詢其中的記錄集

2:唯讀查詢:返回列表,只能提取內容,不能觸發資料庫修改

self.search_read(,['要查詢的字段'])

3:統計數量:返回符合條件的記錄條數

self.search_count(domain)

4:瀏覽:通過一系列id值,返回對應的記錄集

self.browse([id])

5:刪除

self.unlink(domain)

五:new ids

odoo在建立乙個新記錄時,會使用models.ids虛擬乙個記錄id。

可以通過

if is instance(record.id,models.newid):

來判斷。

六、資料庫查詢

import psycopg2

class ***xx(models.model):

........

@api.multi

def oooo(self):

db = psycopg2.connect("dbname=test4 user=postgres")#查詢名叫 test4 的資料庫 postgres 是資料庫的超級使用者名稱

vals = db.cursor()

vals.execute("select sales,prices,sale_date from run_chart")#執行sql語句查詢資料

tables = vals.fetchall()#返回查詢結果

#或者sql = "select *from 表名"

self.env.cr.execute(sql) #執行sql語句

dicts = self.env.cr.dictfetchall() #獲取sql的查詢結果

OC中self和super的使用

1 self用在物件方法中,self指代的是呼叫當前方法的那個物件,可以呼叫其它物件方法。2 self用在類方法中,self指代的是當前類,可以呼叫其它類方法,不可以呼叫物件方法。3 self修飾例項變數 一般在set方法中使用 用在形參變數和例項變數同名時。例 void setspeed int ...

odoo 關於self的迭代器(1)迭代器初步

起因 在學習odoo對他們的self迴圈很不適應,所以決定留些東西在這裡。開篇 計算機最擅長做批量工作,所以任何語言都繞不開迴圈。迴圈我習慣這麼分類 當真是個人的習慣,非常廣義,不要較真 1.以個數為限制的 工作中這種情況並不是太多 n 1 while n 100 print n n n 1for ...

PHP中static 跟self的使用區別

php中static 和self的使用區別。首先來看一下self的情況 class a public static function test class b extends a a test a b test a 先來是看一下static的情況 class a public static func...