Odoo获取记录并将其转换为python obj

2024-05-17 03:19:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在odoo10-e中,是否可以执行一个查询,然后将结果列表或元组转换为python对象。像

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

在上面的查询中,它将返回一条记录

^{pr2}$

现在这个查询将返回一个用户列表。现在有什么方法可以告诉self.env.cr.fetchall()我希望结果是单个用户对象或用户列表。如果没有的话,我们可以在拿到后再投吗?在


Tags: 对象用户fromodoo10selfenvid列表
3条回答

只需将ORM层用于那些简单的查询。有一些简单的方法(例如,对于典型的CRUD->创建、读取、更新、删除):

创建创建(VAL)

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

浏览->;浏览(列出\u id)

^{pr2}$

搜索->;搜索(域)

# 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的上下文中有一个非常大的优势:该层集成了用户访问控制。这只是一个很大的优势。在

有一种方法可以在python列表对象中获得结果。在

    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.合伙人的ID

您可以通过以下方式获得:

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()获取数据,使用browse()方法获取用户的记录集。在

这可能对你有帮助。在

相关问题 更多 >