Odoo14搜索视图新增qty_available字段无法支持文字搜索如何解决
实现可行性说明
可以实现该需求。
问题根因
你当前配置的qty_available是浮点型数值字段,Odoo搜索视图默认逻辑为:仅当用户输入内容和字段类型匹配时,才会触发对应字段的过滤规则。输入文本内容时会跳过数值类型字段的匹配,因此你输入“available”不会触发预先定义的filter_domain。
解决方案
方案1:新增搜索过滤器(符合Odoo原生交互规范,和Odoo10效果完全一致)
修改你的搜索视图XML代码,新增显式过滤器,Odoo搜索框会自动匹配过滤器的string属性值:
<record id="product_search_ventas_plus" model="ir.ui.view"> <field name="name">product.template.search.heredado</field> <field name="model">product.template</field> <field name="inherit_id" ref="product.product_template_search_view"/> <field name="arch" type="xml"> <xpath expr="//field[@name='attribute_line_ids']" position="after"> <field name="qty_available" string="Available Products" filter_domain="[('qty_available','>',0)]"/> <!-- 新增过滤器,输入Available关键词即可匹配到该过滤规则 --> <filter string="Available" name="filter_available" domain="[('qty_available','>',0)]"/> </xpath> </field> </record>
修改完成后升级模块,在搜索框输入“available”就会自动弹出对应过滤选项,选中后即可筛选出库存大于0的产品。
方案2:自定义搜索逻辑(输入关键词直接触发过滤,无需手动选择)
如果需要输入关键词后直接触发过滤,不需要额外点击选中,可以通过Python自定义字段的搜索逻辑:
- 扩展
product.template模型,新增搜索方法:
from odoo import models, fields class ProductTemplate(models.Model): _inherit = 'product.template' qty_available = fields.Float(search='_search_qty_available') def _search_qty_available(self, operator, value): if isinstance(value, str) and 'available' in value.lower(): return [('qty_available', '>', 0)] return [('qty_available', operator, value)]
- 原有XML搜索视图代码无需修改,升级模块后即可生效。
内容的提问来源于stack exchange,提问作者Francis
相关产品推荐
相关产品推荐

