You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Odoo动作窗口/树视图中设置Many2One字段按名称默认搜索

解决stock.quant视图默认搜索"/Stock"位置的问题

你遇到的错误是因为search_default_location_id参数要求传入仓库位置的整数ID,而不是路径字符串"/Stock",Odoo会把你传入的字符串当成ID去查询数据库,自然触发类型错误。以下是几种可行的实现方案:

方案一:动态获取目标位置ID(推荐,适配多环境)

在自定义动作窗口的context中,通过Odoo的ORM方法动态查询"/Stock"对应的位置ID,避免硬编码ID的局限性。

修改动作窗口的XML配置:

<field name="context" eval="{'search_default_location_id': env['stock.location'].search([('complete_name', '=', '/Stock')], limit=1).id}"/>
  • 若"/Stock"是位置的完整路径(比如根仓库的complete_name字段值),用=精确匹配即可;
  • 若需要模糊匹配包含"/Stock"的路径,可把=改成like,比如('complete_name', 'like', '/Stock'),注意确保查询结果唯一,limit=1会取第一个匹配项。

方案二:硬编码位置ID(适合固定环境)

如果你的环境中"/Stock"的ID是固定不变的,可直接传入对应的整数ID(比如假设ID为12):

<field name="context" eval="{'search_default_location_id': 12}"/>

缺点是换环境后ID可能变化,需要重新修改配置。

方案三:直接用domain过滤数据集

如果不需要在搜索栏显示"/Stock"文本,只想打开视图直接显示该位置的库存记录,可直接在动作窗口中设置domain过滤:

<field name="domain" eval="[('location_id.complete_name', '=', '/Stock')]"/>

这种方式会直接过滤stock.quant数据集,打开视图后只展示符合条件的记录,效果和手动搜索一致。

方案四:自定义搜索栏默认显示文本

若希望同时在搜索栏的Location输入框中显示"/Stock"文本,需要继承并修改stock.quant的搜索视图:

<record id="view_stock_quant_search_inherit" model="ir.ui.view">
    <field name="name">stock.quant.search.inherit</field>
    <field name="model">stock.quant</field>
    <field name="inherit_id" ref="stock.view_stock_quant_search"/>
    <field name="arch" type="xml">
        <field name="location_id" position="attributes">
            <attribute name="context">{'search_default_name': '/Stock'}</attribute>
        </field>
    </field>
</record>

之后确保自定义动作窗口使用这个继承后的搜索视图,打开时就会自动在Location搜索框中填充"/Stock"并执行搜索。

内容的提问来源于stack exchange,提问作者holydragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:17:16