2017-07-19 197 views
3

在Odoo 10-e中,可以執行查詢,然後將結果列表或元組轉換爲python對象。像Odoo - 獲取記錄並將其轉換爲python對象

self.env.cr.execute("SELECT * FROM res.users WHERE Id = 1") 

在上面的查詢將返回一個記錄

self.env.cr.execute("SELECT * FROM res.users") 

現在,這個查詢將返回用戶的列表。現在有什麼辦法可以告訴self.env.cr.fetchall()我希望將結果作爲單個用戶對象或用戶列表。如果不是的話,我們可以在抓取之後施放它們嗎?

+0

爲什麼不使用ORM層呢?對不起,但我沒有看到用這樣一個例子繞過ORM層的需要。 – CZoellner

+0

@CZoellner其實我是Odoo的新手,我不知道你怎麼能用ORM獲取那些 – Ancient

回答

2

只爲那些簡單的查詢使用ORM層。有一些簡單的方法,這(例如,對於典型的CRUD->創建,讀取,更新,刪除):

創建 - >創建(瓦爾斯)

# creates a user in db and 
# returns this user as python object (RecordSet) 
created_user = self.env['res.users'].create({'name': 'New User'}) 

瀏覽 - >瀏覽( LIST_OF_IDS)

# reads the whole database rows and 
# returns python objects (RecordSet) 
browsed_users = self.env['res.users'].browse([1,2]) 

搜索 - >搜索(域)

# search database with Odoo's domain syntax 
# returns python objects if something were found 
domain = [('name', '=', 'New User')] 
searched_users = self.env['res.users'].search(domain) 

這些例子只觸及表面。查看Odoo's Developer Documentation瞭解更多信息。

編輯:使用ORM層有優點和缺點。但是在Odoo中,有一個非常大的優勢:該層具有集成的用戶訪問控制。這只是一個很大的優勢。

-1

有一種方法可以在python list對象中得到結果。

qry = """select id from res_partner where parent_id is Null;""" 
    self._cr.execute(qry) 
    result = self._cr.dictfetchall() 
    user_ids=[] 
    for ids in result: 
     user_ids.append(ids.get('id')) 

user_ids變量中,您將獲得所有res.partner的ID。

1

您可以通過以下方式獲得它:

q = "select * from res_users where id = 1" 
#q = "select * from res_users" 
self.env.cr.execute(q) 
res = self.env.cr.dictfetchall() 
users = self.env['res.users'].browse([row['id'] for row in res]) 

與dictfetchall獲取數據(),並使用瀏覽()方法來獲取用戶的記錄。

這可能對你有幫助。

+0

這看起來不錯,我還可以用這個'browse'做更多的事情嗎?我怎樣才能只有那些在「組1」中的用戶。假設「組1」是有效的用戶,並且該組中有一些用戶 – Ancient

相關問題