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

Odoo销售订单自定义字段问题:从Partner ID取值及字段未找到报错

解决Odoo自定义字段"field not found"错误并从Partner ID取值

先看你当前的代码和问题:你想让自定义字段从Partner ID获取值,但目前遇到了"field not found"错误,同时当前代码里的字段是用默认方法返回固定值,没关联客户信息。咱们一步步来解决:

一、先排查"field not found"错误的原因

你的代码里有几个小问题会引发这个错误:

  • 视图重复定义了inherit_id:在<record>标签里写了两次<field name="inherit_id" ref="sale.view_order_form"/>,这会导致视图解析异常,Odoo可能无法正确识别你新增的字段
  • 视图字段被注释:你把<field name="custom_field"/>注释掉了,就算模型里有字段,视图没渲染也可能引发识别问题(不过更核心的原因是重复的inherit_id)
  • 模块未正确升级:如果修改了模型代码但没升级模块,Odoo数据库里还没创建这个字段,也会报field not found

二、修改代码实现从Partner ID取值的需求

你需要把自定义字段改成计算字段(或用onchange方法),这样就能自动从关联的partner_id里获取值。以下是修正后的完整代码:

1. 模型代码(models/sale_order.py)

from odoo import models, fields, api

class SaleOrderInherited(models.Model):
    _inherit = 'sale.order'

    custom_field = fields.Text(string="Registration Note", compute="_compute_custom_field")

    @api.depends('partner_id')
    def _compute_custom_field(self):
        for order in self:
            # 这里可以根据需求从partner_id里取任意字段,示例取客户名称+备注
            if order.partner_id:
                order.custom_field = f"客户:{order.partner_id.name},备注:{order.partner_id.comment or '无'}"
            else:
                order.custom_field = ""
  • 用compute属性绑定计算方法,depends('partner_id')表示当partner_id变化时自动重新计算字段值
  • 遍历每个销售订单,根据partner_id的存在情况动态赋值

2. 视图代码(views/sale_order_views.xml)

<?xml version="1.0" encoding="utf-8" ?>
<odoo>
    <data>
        <record id="sales_view_form" model="ir.ui.view">
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="model">sale.order</field>
            <field name="arch" type="xml">
                <field name="date_order" position="after">
                    <field name="custom_field"/>
                </field>
            </field>
        </record>
    </data>
</odoo>
  • 去掉了重复的inherit_id定义
  • 取消了<field name="custom_field"/>的注释,确保字段在视图中显示

三、后续操作步骤

  1. 重启Odoo服务(开发模式下可省略,但建议执行)
  2. 在Odoo后台找到你的自定义模块,点击升级按钮,确保模型和视图的修改同步到数据库
  3. 打开销售订单表单,选择客户后,就能看到custom_field自动显示从客户那里获取的值了

如果仍出现field not found错误,可以检查:

  • 模块的__manifest__.py里是否正确声明了models和views文件夹
  • 确认模块已安装,且升级过程中没有报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:24:52