Odoo的compute字段实现可搜索,inverse设置相关字段值

odoo中,实现compute字段可搜索,有两种方法。

方法一

设置字段参数 store=True,使其字段存在数据库里,便可搜索。此方法较为简单,不具体演示。

方法二

设置字段参数 search方法,如下可实现所需逻辑,可根据自己的逻辑进行书写响应代码。这个⽅法预期不实现实际的搜索。⽽是接收⽤于搜索该字段的运算符和值来作为参 数,并预期返回⼀个带有⽤于替换搜索条件的域。
在这里插入图片描述

注意

若该字段不存数据库请使用方法二,方法一较为简单。

补充

有时我们使用compute对相应字段值做出修改,想让有关字段值也做出修改,直接写在该函数代码里,并不会生效,此时需要inverse属性值,根据对应逻辑修改相关字段值。

当通过compute属性指定方法,根据依赖值计算得到当前字段值时。一般也要制定这个计算的逆运算——根据当前字段值,改变依赖值。

比如:开始日期+持续时间=结束日期,我们有这个可以得到结束日期。

如果用户指定了开始日期和结束日期,那么持续时间=结束日期-开始日期,实现这个逻辑的方法就是inverse属性值指向的方法。

balance_amount = fields.Monetary(inverse='_set_executed_amount')

    def _set_executed_amount(self):
        for res in self:
            if self.contract_category_code != 'income_contract':
                executed_amount = sum(res.payment_records_ids.mapped('payment_amount'))
            else:
                executed_amount = sum(res.contract_receipt_record_ids.mapped('request_amount'))
            res.executed_amount = executed_amount
Odoo中,可以通过Many2one字段给Many2many字段传递。这可以通过使用Odoo的特殊语法和API来实现。 具体方法如下: 1. 在Many2one字段对应的模型中,添加一个Many2many字段,用于存储传递的。例如,我们在模型A中添加一个Many2many字段,用于存储传递给模型B的。 ```python class ModelA(models.Model): _name = 'model.a' name = fields.Char(string='Name') value_ids = fields.Many2many(comodel_name='model.b', string='Values') ``` 2. 在Many2one字段对应的模板中,添加一个Many2many字段的下拉菜单,用于选择传递的。这可以通过使用Odoo的特殊语法和API来实现。例如,我们在模板中添加一个下拉菜单,用于选择传递给模型B的。 ```xml <field name="value_ids" widget="many2many_tags"/> ``` 3. 在Many2one字段对应的模型中,添加一个按钮,用于触发传递操作。按钮的onClick方法中,通过API获取Many2many字段,并将其传递给Many2one字段对应的记录中。例如,我们在模型A中添加一个按钮,用于触发传递操作。 ```python @api.multi def transfer_values(self): for record in self: values = record.value_ids.ids record.other_model_id.write({'many2many_field': [(6, 0, values)]}) ``` 在上述代码中,我们通过API获取Many2many字段,并将其传递给Many2one字段对应的记录中。 通过上述方法,我们可以实现Many2one字段给Many2many字段传递的操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值