odoo里面的一些ORM操作
案例0001
sale_obj=self.env['sale.order'].browse(k)
通过browse查找对象
找到对象里面的 sale_obj.name
browse
获取一个数据库id或一个ids列表,并返回一个记录集,当从Odoo外部获得记录id时(例如通过外部系统的往返)或在旧API中调用方法时,会很有用:
>>> self.browse([7, 18, 12])
res.partner(7, 18, 12)
exists()
返回一个新的记录集,其中只包含数据库中存在的记录。可以用来检查记录(如从外部获得的)是否仍然存在:
if not record.exists():
raise Exception("The record has been deleted")
或者在调用了一个可以删除一些记录的方法之后:
records.may_remove_some()
# only keep records which were not deleted
records = records.exists()
ref()
环境方法返回与提供的外部id匹配的记录(external id):
>>> env.ref('base.group_public')
res.groups(2)
ensure_one()
检查记录集是不是一个单例(只包含一个记录),否则会产生一个错误:
records.ensure_one()
# is equivalent to but clearer than:
assert len(records) == 1, "Expected singleton"
案例0002
filtered()
返回一个记录集,其中只包含满足所提供的断言功能的记录。断言也可以是一个字符串,由字段为真或假来过滤:
通过条件过滤产生一个记录集
# only keep records whose company is the current user's
records.filtered(lambda r: r.company_id == user.company_id)
# only keep records whose partner is a company
records.filtered("partner_id.is_company")
sorted()
返回按所提供的key函数排序的记录集。如果没有提供key,请使用该模型的默认排序顺序:
# sort records by name
records.sorted(key=lambda r: r.name)
mapped()
将所提供的函数应用到记录集中的每个记录,如果结果是记录集,则返回一个记录集:
# returns a list of summing two fields for each record in the set
records.mapped(lambda r: r.field1 + r.field2)
所提供的函数可以是一个字符串去获取对应的字段值:
# returns a list of names
records.mapped('name')
# returns a recordset of partners
record.mapped('partner_id')
# returns the union of all partner banks, with duplicates removed
record.mapped('partner_id.bank_ids')
计算字段(Computed fields)
可以使用compute
参数计算字段(而不是直接从数据库读取)。它必须将计算的值分配给字段。如果它使用其他字段的值,那么它应该使用depends()
来指定那些字段:
from odoo import api
total = fields.Float(compute='_compute_total')
@api.depends('value', 'tax')
def _compute_total(self):
for record in self:
record.total = record.value + record.value * record.tax
- 在使用子字段时,依赖项可以是虚线(dotted paths):(dependencies can be dotted paths when using sub-fields:)
@api.depends('line_ids.value')
def _compute_total(self):
for record in self:
record.total = sum(line.value for line in record.line_ids)
- 计算字段不是默认存储的,它们是在被请求时计算和返回的。设置
store=True
会将它们存储在数据库中并自动启用搜索 - 还可以通过设置
search
参数来启用计算字段。value是返回一个域的方法名:
upper_name = field.Char(compute='_compute_upper', search='_search_upper')
def _search_upper(self, operator, value):
if operator == 'like':
operator = 'ilike'
return [('name', operator, value)]
odoo里面的一些ORM操作的更多相关文章
- Python/Django(CBV/FBV/ORM操作)
Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
- Django中ORM操作
ORM操作: class UserInfo(models.Model): username = models.CharField(max_length=32) password = models.Ch ...
- Django的ORM操作
ORM操作 select * from tb where id > 1 # 对应关系 models.tb.objects.filter(id__gt=1) models.tb.objects.f ...
- python 外键用法 多对多关系 ORM操作 模板相关
一.app/models中写类(设计表结构) 1.普通类 class A(models.Model): id=modles.AutoField(primary_key=True) name=mode ...
- Django之ORM操作
Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...
- Django之ORM操作(聚合 分组、F Q)
Django之ORM操作(聚合 分组.F Q) 聚合 aggregate()是QuerySet的一个终止子句,也就是说,他返回一个包含一些键值对的字典,在它的后面不可以再进行点(.)操作. 键的名 ...
- python第一百零五天 ---Django 基础 路由系统 URL 模板语言 ORM 操作
一 路由系统 URL 1 url(r'^index/',views.index) url(r'^home/', views.Home.as_view()) 2 url(r'^detail-(\d+). ...
- Django ORM 操作 必知必会13条 单表查询
ORM 操作 必知必会13条 import os # if __name__ == '__main__': # 当前文件下执行 os.environ.setdefault('DJANGO_SETTIN ...
随机推荐
- 云原生时代的Java
原文链接(作者:周志明):https://time.geekbang.org/column/article/321185 公开课链接:https://time.geekbang.org/opencou ...
- 密码学系列之:blowfish对称密钥分组算法
目录 简介 blowfish详解 密钥数组和S-box 密钥数组 S-box 生成最终的K数组 blowfish blowfish的应用 blowfish的缺点 简介 Blowfish是由Bruce ...
- Pytorch项目基本结构
梳理一下Pytorch项目的基本结构(其实TF的也差不多是这样,这种思路可以迁移到别的深度学习框架中) 结构树 -------checkpoints #存放训练完成的模型文件 ----xxx.pk ...
- 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)
背景 最近因为要做一个新的管理后台项目,新公司大部分是用vue写的,技术栈这块也是想切到react上面来,所以,这次从0到1重新搭建一个react项目架子,需要考虑的东西的很多,包括目录结构.代码 ...
- golang 用defer 捕获error 需小心
有时一个函数内需要根据最后是否出错,决定是否执行某个操作.这时候如果函数的分支又比较多,就会比较麻烦了. defer 处理这个情况刚好合适 func main() { var err error by ...
- Pandas高级教程之:category数据类型
目录 简介 创建category 使用Series创建 使用DF创建 创建控制 转换为原始类型 categories的操作 获取category的属性 重命名categories 使用add_cate ...
- 环境安装——MySQL安装
@ 目录 一文教会你安装与卸载MySQL 1. 官网下载 2. 文件下载 3. 卸载步骤 4. 安装步骤 5. MySQL配置 6. 安装出现的问题 6.1 如果出现了最后一步卡死的状态的话,不要慌: ...
- 地图可视化神器keplergl新增对jupyter lab 3.0的支持
就在几天前,地图可视化神器kepler.gl面向Python的接口库keplergl迎来了新的0.3.0版本更新. 虽然官方文档还并未及时更新相关的内容说明,但我在快速地试用之后发现,现在的keple ...
- 21、部署heartbeat
21.1.heartbeat部署规划: 本文的实验环境是虚拟机设备: 名称 接口 ip 用途 master-db(主) eth0 10.0.0.16/24 用于服务器之间的心跳连接(直连) eth1 ...
- Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL)
MyBatis-Plus是MyBatis的增强工具,Generator通过MyBatis-Plus快速生成Entity.Mapper.Mapper XML.Service.Controller等模块的 ...