(58) 在计算字段提供搜索功能

问题描述:
运单号是在出库单上后勤填写的,平时销售订单有一个运单号是通过计算字段
从出库单上获的,这时,销售员,要在销售列表上,输入运单号 找到对应的销售订单

分析:
可以用两种方法
方法1.字段设置为 store=True , 这样和其它的普通的字段一样,可以搜索,有一点
在计算时会很慢,在出库货上填写运单号时,转半天,影响效率

方法2,字段加上search 加上对应的方法
这个写逻辑复杂一些,但效率最高

解决:
用方法2:
tracking_number_raw = fields.Text(string='Tracking Number Raw',

compute='_get_tracking_number',search='_tracking_number_raw_search')


    def _tracking_number_raw_search(self, operator, value,limit=100):
         if operator == 'like':
             operator = 'ilike'
         stock_pickings = self.env['stock.picking'].search([('picking_type_code','=','outgoing'),

('carrier_tracking_ref',operator,value)])
         if stock_pickings :
             domain = [('id', 'in', [sale.id for sale in stock_pickings.sale_id])]
         else:
             domain = [('id', '=', 0)]
         return domain


---------------------------------
<record id="view_sales_order_filter_inherit" model="ir.ui.view">
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_sales_order_filter" />
            <field name="arch" type="xml">
                <field name="partner_id" position="after">
  
                  <field name="tracking_number_raw" />

                </field>

                </field>
        </record>

---------------------------------
这样在列表视图右上角输入运单号,有对应的运单号搜索,这样就可以找到对应的销售单

重点讲解 search 对应的方法
返回是domain  , 对应的字段一定对象要有的字段,像我上面是sale.order对象
id 这个字段一定有的 ,这里可以灵活变化,可换成 name 条件去找,等等,这样就解决
所有关于字段为 compute 类型的搜索问题。

原文地址:https://www.cnblogs.com/toby2chen/p/7922265.html