首页 > 其他分享 >2 odoo 计算字段 中 inverse的使用

2 odoo 计算字段 中 inverse的使用

时间:2023-03-06 22:13:31浏览次数:53  
标签:upper inverse self 字段 street 计算 odoo 数据库

计算字段默认不允许编辑

增加了 inverse后 可以对该字段进行编辑,并在保存时执行inverse方法,

举例:

  1. partner_id = fields.Many2one('res.partner')
  2. street = fields.Char(related='partner_id.street', inverse='_set_street_value')
  3. def _set_street_value(self)
  4. if self.street and self.partner_id.street != self.street:
  5. self.partner_id.street = self.street

点击保存后 会执行_set_street_value方法,将外键关联表中的street更新为所更改的值

以下内容来源 ODOO中的Related字段及Computed字段原理

简介: 难理解的参数: Store = True 原因:ODOO 默认情况下不存储计算字段。(因为,可以减少数据库的开销)。但你知道的, 当您希望能够执行某个函数,需要从数据库中调用此值时,这会导致问题。要修复此问题,odoo 在计算字段上提供 store=true 标志。
难理解的参数:

Store = True

原因:ODOO 默认情况下不存储计算字段。(因为,可以减少数据库的开销)。但你知道的, 当您希望能够执行某个函数,需要从数据库中调用此值时,这会导致问题。
要修复此问题,odoo 在计算字段上提供 store=true 标志。

但是,还有一个问题:它只开火一次。为了解决这个问题,您需要使用@api.depends 装饰器,以便在每次更改相关字段时更新字段。

@api.depends 还可以接收以逗号分隔的字段名列表

@api.depends(‘field_name’)

或者

@api.depends(‘field_name’,’another_field_name’)

@api.one @api.depends(‘field2’)

def _compute_field1(self):

  1. self.field1 = 每次“field2”更改时发生的事件
  2. field1 = fields.Char(compute=_compute_field1,store=True) field2 = fields.Char()

Related Field

原理解析:

related_1

可以通过一个小实验验证,related 字段,在不添加 store = True 参数时,通过 NavCat 在数据库中是看不到此字段的。

由此可见:

Related 字段在数据库中是没有存储的,均是每次调用此字段时,通过函数计算出来。

related_2

Related 字段在数据库中是没有存储的,均是每次调用此字段时,通过函数计算出来。 所以,若想要让其他函数引用此 related 字段,必须添加 store = True 属性。

Inverse

反参数的使用非常简单。通常,计算字段是只读的,因为它从记录集即时计算值。如果您需要在 计算字段上进行手动输入,可以通过给出反函数来完成。因此,当字段被写入/创建时,它会触发对修饰函数的调用。它反转计算并设置相关字段。

Invserse 通俗点讲的话,他是 Compute 的相反设置.我们在 field 中设置了它对应的 Compute 计算方法,那么这个字段就变成了只读的,这时候我们可以设置 inverse,来达到为该字段赋值的目的。设置了 inverse 这个,字段就可以在前端直接编辑,赋值就是通过这个 inverse 设置的方法。

upper = fields.Char(compute=’_compute_upper’,

inverse=’_inverse_upper’, search=’_search_upper’)

@api.depends(‘employee_id’) def _compute_upper(self):

for rec in self:

rec.upper = rec.employee_name.upper() if rec.employee_name else False

def _inverse_upper(self): for rec in self:

rec.employee_name = rec.upper.lower() if rec.upper else False

步骤一:

related_3

步骤二:
related_4

步骤三:

related_5

Search

默认情况下,计算字段不存储到数据库中,而是动态计算。添加属性“store=true”将在数据库 中存储字段值。存储字段的优点是,对该字段的搜索是由数据库本身完成的。

因此,不能正常搜索未存储在数据库中的计算字段,要启用搜索,必须显式定义搜索函数。这可 以通过在计算字段中添加“搜索”参数来实现。如果我们添加一个方法来搜索计算字段,那么在 对模型进行实际搜索之前,在处理域时会调用该方法。

  1. standard_price = fields.Float('Cost', compute='_compute_standard_price', inverse='_set_standard_price', search ='_search_standard_price', digits=dp.get_precision('Product Price'), groups="base.group_user",)
  2. def _search_standard_price(self, operator, value):
  3. products = self.env['product.product'].search([('standard_price', operator, value)],limit=None) return [('id', 'in', products.mapped('product_tmpl_id').ids)]

标签:upper,inverse,self,字段,street,计算,odoo,数据库
From: https://www.cnblogs.com/pythonClub/p/17185711.html

相关文章

  • 5 odoo 自定义界面
    本文以项目模块自定义工作台为例模块名称:my_projectodoo的自定义界面实现主要的两个工具:Qweb、js正式开始之前在需要自定义内容的模块中定义几个文件:static/js/proje......
  • 7 odoo12 全屏模块开发
    全屏功能开发:1定义web模板t-name=”WebFullScreen”,预置全屏和退出全屏的a标签,退出全屏默认隐藏<?xmlversion="1.0"encoding="UTF-8"?><templatexml:space="pre......
  • 调用其它可执行程序(比如计算器)
    usesshellapiShellExecute(0,'Open',ExeName,nil,nil,SW_SHOW)ExeName:='C:WinNTSystem32Calc.exe';也有可能系统不安装在C盘,建议把Calc.exe拷到程序的运行文件下E......
  • 计算机的硬件与软件
    吾心安处即吾乡。吾乡何处不可眠1.计算机组成:硬件+软件2.CPU、内存与硬盘CPU(CentralProcessingUnit,中央处理器)人靠大脑思考,电脑靠CPU来运算、控制。硬......
  • 计算机组成原理--性能指标
             ......
  • 169_技巧_Power BI 依据促销日历计算销售金额
    169_技巧_PowerBI依据促销日历计算销售金额一、背景在各位表格表姐们计算销售金额的时候,有一个绕不开的问题:商品有促销的问题,需要使用对应的促销价来计算销售额。按照......
  • odoo报错:AttributeError: ‘_unknown‘ object has no attribute ‘id‘
    在开发中遇到的这个问题AttributeError:'_unknown'objecthasnoattribute'id'1、当在一个模块中写了一个many2one字段,例如a=fields.many2one('base.repair','基础......
  • 个税计算器丨用它,计算个税不用愁!!
    最近热热闹闹的退个税大潮,你退了多少呢~虽然个税软件已经为我们计算好了该交多少税、该退多少钱,直接按流程操作就好,但我们并不是很了解其中的计算过程,有网友正好开发了一......
  • 计算机系统要素--逻辑门
                   ......
  • 波特率计算笔记
    一、波特率为9600表示的是串口每秒钟可以传输9600bit,每传输1bit所需时间:1s/9600bit=1000000(us)/9600(bit)=1000/9.6=104.1667us 那么8bit就是104.1667∗8......