查看“ORM参考”的源代码
←
ORM参考
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看并复制此页面的源代码:
Odoo为记录的字段维护一个缓存,所以不是每个字段访问都会发出一个数据库请求,这对性能来说是可怕的。以下示例仅对第一条语句查询数据库: record.name#首次访问从数据库读取值 record.name#second access从缓存获取值 为了避免一次读取一个记录上的一个字段,Odoo根据一些启发式方法预取记录和字段以获得良好的性能。一旦必须在给定记录上读取字段,ORM实际上在较大的记录集上读取该字段,并将返回的值存储在高速缓存中供以后使用。预取的记录集通常是记录从中通过迭代而来的记录集。此外,所有简单存储的字段(布尔,整数,浮点,字符,文本,日期,日期时间,选择,许多2)它们对应于模型表的列,并在同一查询中有效地提取。 考虑下面的示例,其中partners是1000条记录的记录集。没有预取,循环将对数据库进行2000次查询。使用预取,只进行一个查询: 合作伙伴: print partner.name#first pass prefetches'name'和'lang' 所有“合作伙伴”上的#(和其他字段) 打印partner.lang 预取也对辅助记录起作用:当读取关系字段时,它们的值(它们是记录)被预订用于将来的预取。访问这些辅助记录之一会从同一模型预取所有辅助记录。这使得以下示例只生成两个查询,一个用于合作伙伴,一个用于国家/地区: countries = set() 合作伙伴: country = partner.country_id#first pass预取所有合作伙伴 countries.add(country.name)#首次通过预取所有国家 设置操作 记录集是不可变的,但是可以使用各种集合操作来组合相同模型的集合,返回新的记录集。设置操作不保留顺序。 record in set返回是否在集合中存在记录(必须是1元素记录集)。记录不在集合中是反向操作 set1 <= set2和set1 <set2返回set1是否为set2的子集(分别为strict) set1> = set2和set1> set2返回set1是否为set2的超集(相应的严格) set1 | set2返回两个记录集的并集,新记录集包含任何源中存在的所有记录 set1&set2返回两个记录集的交集,一个新记录集只包含两个源中都存在的记录 set1 - set2返回一个只包含不在set2中的set1记录的新记录集 其他记录集操作 记录集是可迭代的,所以通常的Python工具可用于转换(map(),sorted(),ifilter(),...),但是这些返回一个列表或迭代器,取消调用方法的能力,以使用设置操作。 因此,记录集提供返回记录集的这些操作(如果可能): filtered() 返回仅包含满足提供的谓词函数的记录的记录集。谓词也可以是一个字符串,按字段进行过滤:true或false: #只保留公司是当前用户的记录 records.filtered(lambda r:r.company_id == user.company_id) #只保留合作伙伴是公司的记录 records.filtered(“partner_id.is_company”) sorted() 返回按提供的键函数排序的记录集。如果没有提供键,请使用模型的默认排序顺序: #按记录按名称排序 records.sorted(key = lambda r:r.name) mapped() 将提供的函数应用于记录集中的每个记录,如果结果是记录集,则返回记录集: #返回集合中每个记录的两个字段的列表 records.mapped(lambda r:r.field1 + r.field2) 提供的函数可以是一个字符串来获取字段值: #返回名称列表 records.mapped('name') #返回合作伙伴的记录集 record.mapped('partner_id') #返回所有合作伙伴银行的并集,删除重复项 record.mapped('partner_id.bank_ids') 环境 环境存储ORM使用的各种上下文数据:数据库游标(用于数据库查询),当前用户(用于访问权限检查)和当前上下文(存储任意元数据)。环境还存储高速缓存。 所有记录集都有一个环境,它是不可变的,可以使用env访问,并允许访问当前用户(用户),游标(cr)或上下文(上下文): >>> records.env <环境对象...> >>> records.env.user 用户(3) >>> records.env.cr <Cursor object ...) 从其他记录集创建记录集时,将继承环境。该环境可用于在其他模型中获取空记录集,并查询该模型: >>> self.env ['res.partner'] res.partner >>> self.env ['res.partner']。search([['is_company','=',True],['customer','='
返回至
ORM参考
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
odoo 中文开发手册
odoo 开发参考
odoo 实施笔记
Odoo 最佳方案
关于 OdooV
Odoo FAQ
工具
链入页面
相关更改
特殊页面
页面信息
友情链接
odoo官网
odoo中文网
odoo实施