zoukankan      html  css  js  c++  java
  • 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)]
     
  • 相关阅读:
    nginx 配置优化(简单)
    Nginx 安装
    Smokeping安装教程
    test [ ] 四类
    if语句中的判断条件(nginx)
    力扣 1431. 拥有最多糖果的孩子 python
    力扣 1672. 最富有客户的资产总量+1512. 好数对的数目 python
    力扣 剑指 Offer 58
    力扣 8. 字符串转换整数 (atoi)python--每日一题
    力扣 7. 整数反转python 每日一题
  • 原文地址:https://www.cnblogs.com/1314520xh/p/11455971.html
Copyright © 2011-2022 走看看