【问题标题】:Odoo 10 or above - enhance searchOdoo 10 或更高版本 - 增强搜索
【发布时间】:2018-01-18 15:11:40
【问题描述】:

删除 filter_domain 后,显示错误:


** 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 中包含了一个新的搜索代码:

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

【问题讨论】:

  • 你尝试了什么?请向我们展示您的一些代码。
  • 我有上面的代码,但它不起作用,我不知道它出了什么问题。
  • 并将这段代码放在相关的View中
  • 我在想我可以使用带有 find() 的迭代循环来标识记录。但我不知道如何制作代码。
  • 首先不要将代码添加为图片...所以有语法突出显示,所以请将您的代码添加为文本。第二个我不明白你的问题:举一个非常简单的例子:存在哪些记录(具有重要的字段内容),搜索短语是什么以及搜索后的结果应该是哪些记录。

标签: odoo inventory


【解决方案1】:

您使用的运算符是错误的,因为我喜欢将值搜索到字段中,但您需要相反,将字段搜索到值中,我为您的问题找到了解决方案,但我不认为这是最好的方法,但它有效:

在 SQL 中:position(field in 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

您还需要考虑其他运算符。

希望对你有帮助!

【讨论】:

  • 嗨,胡安,只需使用您的代码,但它不会显示我想要的结果(但没有错误;就像短字符的原始搜索一样)。可能是我对文件中的代码有一些误解。我怎样才能将代码发送给您以供简单审查?
  • Firat 使用编辑器编辑您的问题并发布您的代码,不要粘贴您的代码图片,其次,使用和数据库管理器显示您的数据并执行我的答案中显示的查询。
  • 避开filter_domain属性,再次检查。
  • 如果删除 filter_domain.. ,会出现 Odoo 错误:..... 文件“/usr/lib/python2.7/dist-packages/odoo/fields.py”,第 1048 行,在determine_domain return getattr(records, self.search)(operator, value) AttributeError: 'stock.picking' 对象没有属性 '_search_custom_name'
  • 请显示您完整的 SearchView 代码(无图片)定义,我检查了我的代码,它运行良好。不要忘记更新你的模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2022-06-13
相关资源
最近更新 更多