2017-07-19 201 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

相关问题