Odoo 10 或更高版本 - 增强搜索
Odoo 10 or above - enhance search
删除 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的记录):
您使用的运算符是错误的,因为我喜欢将值搜索到字段中,但您需要另一种方式,将字段搜索到值中,我找到了解决您问题的方法,但我认为不是是最好的方法,但它有效:
In SQL: position(field in str), search field into 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
您还需要考虑其他运算符。
希望对您有所帮助!
删除 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的记录):
您使用的运算符是错误的,因为我喜欢将值搜索到字段中,但您需要另一种方式,将字段搜索到值中,我找到了解决您问题的方法,但我认为不是是最好的方法,但它有效:
In SQL: position(field in str), search field into 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
您还需要考虑其他运算符。
希望对您有所帮助!