如何在 Odoo 16 中添加计算字段的搜索过滤器


首先,了解 Odoo 使用计算字段的原因很重要。当我们需要从其他字段获取计算值或计算值时,就会使用计算字段。换句话说,不是从数据库中检索值,而是可以使用函数计算字段的值。计算字段的一个例子是产品总金额,即通过将产品价格乘以产品总数得出。即,总额等于产品价格乘以产品数量。

在Odoo 16中,计算字段默认不保存在数据库中。因此,在某些情况下我们需要使用这些计算字段进行搜索或过滤。

主要介绍如何在 Odoo 16 中为非存储计算字段添加搜索功能来实现这一点。

在 Odoo 中,计算字段可以以两种不同的方式存储。通过设置 store=True,我们可以创建商店字段。此外,您可以通过在字段上设置来使用搜索功能。

我将使用销售订单中的 is_expired 字段作为示例来说明这一点。

我们没有按 is_expired 字段进行过滤的选项。让我们通过继承销售订单来添加它 

 

class SaleOrder(models.Model):
   _inherit = "sale.order"
   is_expired = fields.Boolean(string="Is Expired",                  compute='_compute_is_expired',store=True)

在这里,我们为字段添加了字段属性 store=True。(注意:如果维护 store=True,则只有在依赖字段的值发生变化时,计算函数才会运行)。

使用计算字段进行搜索的第二种方法是向计算字段添加搜索功能,如下面提供的代码所示。

 

is_expired = fields.Boolean(string="Is Expired", compute='_compute_is_expired',search = '_search_is_expired')
def _search_is_expired(self, operator, value):
   today = fields.Date.today()
   records = self.env['sale.order'].search([('validity_date', '<', today)])
   return [('id', 'in', records.ids)]

 我们需要继承 XML 中的搜索视图并向其中添加过滤器。

<record id="is_expired_view_search_inherit_quotation" model="ir.ui.view">
   <field name="name">is.expired.search.view</field>
   <field name="model">sale.order</field>
   <field name="inherit_id" ref="sale.view_sales_order_filter"/>
   <field name="mode">primary</field>
   <field name="priority">32</field>
   <field name="arch" type="xml">
   <xpath expr="//filter[@name='my_sale_orders_filter']" position="after">
       <filter name="is_expired" string="Is Expired"  domain="[('is_expired',  '=', True)]"/>
   </xpath>
</field>
</record>

同样,我们不仅可以为布尔字段添加搜索功能,还可以为其他类别字段的计算字段添加搜索功能。

这是如何在 Odoo 中包含计算字段的搜索过滤器。我们将编写代码来计算计算函数中的值。此外,搜索函数指定应返回的内容。当选择 store=True 时,数据将保存到数据库。

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的蜗牛..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值