odoo部分ORM常用方法

1. create

记录创建方法。创建记录的orm函数。页面新建点击保存时触发调用。返回值为创建成功的记录集。需要配合装饰器api.model使用

api.model:

模型修饰器。使用该修饰器的方法,第一个参数self会去除记录集ids,只带有模型相关属性。

    @api.model
    def create(self, vals_list):
        res = super(EnoAssetPeriod, self).create(vals_list)
        
        return res

vals_list中为传入的数据

res为模型对象

可以通过例如self.name来获取数据

2. write

记录更新方法。修改记录的orm函数。页面编辑点击保存时触发调用。返回值为布尔值

True修改成功,False修改失败

    def write(self, vals):
        res = super(EnoAssetPeriod, self).write(vals)
        
        return res

self为修改之前的模型

vals为修改的数据

修改成功res为True否则为False

3.unlink

记录删除方法。删除记录的orm函数。页面点击删除时触发调用删除成功返回True

    def unlink(self):
        for rec in self:
            if rec.asset_period_status == 'open':
                raise ValidationError("不能删除打开状态")
        return super(EnoAssetPeriod, self).unlink()

4.search_count方法:

记录查询统计行数方法。根据domain条件查询符合条件的记录条数,返回值为整型,条件查询结果的条数。

例如:

# 查询一个公司下的同一公司编号的数量是否大于1
self.search_count([('company_id', '=', self.company_id.id), ('asset_number', '=', self.asset_number)]) > 1

5.search方法

记录查询方法。根据domain条件返回对应记录集,符合查询条件的记录集

dep2_ids = self.search([('parent_id', '=', False)])

6.name_search方法

many2one字段点击时调用的方法

例子:编码和名称的模糊查询

    @api.model
    def name_search(self, name='', args=None, operator='ilike', limit=100):
        """
        支持编码、名称搜索
        """
        args = args or []
        if name:
            # args += [('code', '=', name)]
            args += ['|', ('name', 'ilike', name), ('code', 'ilike', name)]

        return super(EnoTestDepartment, self).name_search(name=name, args=args, operator=operator, limit=limit)

7.browse方法

使用id查询记录集方法。可以配合search使用,search查询出记录级后,通过browse方法传入id值来取出对应值。

示例代码

 dep_ids = self.search([('parent_id', '=', False)]).mapped('code')  # ['01','02']
 self.browse(dep_ids)

8.ids方法

获取记录集中的id列表

9.mapped方法

读取记录集字段值,返回记录级的指定字段

示例代码:

dep_ids = self.search([('parent_id', '=', False)]).mapped('code') 

10.filtered方法

记录集筛选。(通常后面视使用匿名函数,比如lambda a:a.data_form < a.data_to)

示例代码:

dep2_ids = self.search([('parent_id', '=', False)]). \
                    filtered(lambda a: a.date_from < a.date_to)

11.sorted方法

记录集排序,对记录集排序

示例代码

dep2_ids = self.search([('parent_id', '=', False)]). \
                    filtered(lambda a: a.date_from < a.date_to).sorted(key=lambda x: x.code or x.code, reverse=False)

12._auto_init方法

模块升级安装模型初始化方法。

13.init方法

模块升级安装模型初始化方法

14.copy方法

记录复制方法。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值