Odoo 10或以上 - 增强搜索

时间:2018-01-18 15:11:41

标签: odoo inventory

删除filter_domain后,会显示错误:

enter image description here

** 2018年2月1日更新**

以下是我的.odoo / addons / ted / models / ted_inventory.py

中路径下的代码
from odoo import api, fields, models

class TedInventory(models.Model):
    _inherit = 'stock.picking'

    trackingnum = fields.Char('trackingnum', readonly=True, index=True, help="Tracking number")  
    custom_name = fields.Char(string='Tracking Number',compute='_compute_custom_name',search='_search_custom_name')

    @api.multi
    @api.depends()
    def _compute_custom_name(self):
       ''' The field has to be a computed field
        You do not need to do anything here
       '''
       pass

    def _search_custom_name(self, operator, value):
        res = []
        if operator == 'ilike':
            query = "SELECT id FROM stock_picking WHERE position(trackingnum in %s) >= 1"
            self._cr.execute(query, (value,))
            res_ids = [x[0] for x in self._cr.fetchall()]
            res.append(('id', 'in', res_ids))
            return res

我确定我的应用已安装,因为我可以在stock.picking模型中找到custom_name和trackingnum。

我还在SearchView中添加了一个新的搜索代码: enter image description here

当我在这里搜索时,搜索结果什么都没有(因为我希望挖出TN1234的记录):

enter image description here

1 个答案:

答案 0 :(得分:0)

你正在使用的操作员是错误的,可以将价值搜索到字段中,但是你需要另一个明智的选择,搜索字段中的值,我找到了解决问题的方法,但我不认为它是最好的方法,但它有效:

在SQL中: position(str中的字段),将字段搜索到str。

def _search_custom_name(self, operator, value):
    res = []
    if operator == 'ilike':
        query = "SELECT id FROM stock_picking WHERE position(trackingnum in %s) >= 1"
        self._cr.execute(query, (value,))
        res_ids = [x[0] for x in self._cr.fetchall()]
        res.append(('id', 'in', res_ids))
        return res

您也需要考虑其他运营商。

我希望这对你有所帮助!