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

Odoo网站更新联系人详情报错:未知字段'umur,lama_kerja,grade,talent'

Odoo联系人模块新增字段更新报错排查

问题场景

在Odoo联系人模块新增umur、lama_kerja、grade、talent字段后,前端网站详情页能正常读取数据,但更新记录时提示<Unknown field 'umur,lama_kerja,grade,talent'>错误。

用户提供代码

Python字段定义

class ModificationContact(models.Model):
    _inherit = 'res.partner'

    umur = fields.Char('Umur', store=True)
    lama_kerja = fields.Char('Lama Kerja', store=True)
    grade = fields.Char('Grader', store=True)
    talent = fields.Char('Talent', store=True)

网站模板XML

<template id="my_custom_details" inherit_id="portal.portal_my_details" name="Update Contact Details">
          <xpath expr="//div[hasclass('col-lg-12')]" position="after">
            <div t-attf-class="form-group #{error.get('umur') and 'o_has_error' or ''} col-xl-6">
                <label class="col-form-label" for="umur">Umur</label>
                <input type="text" name="umur" t-attf-class="form-control #{error.get('umur') and 'is-invalid' or ''}" t-att-value="umur or partner.umur" />
            </div>
            <div t-attf-class="form-group #{error.get('lama_kerja') and 'o_has_error' or ''} col-xl-6">
                <label class="col-form-label" for="lama_kerja">Lama Kerja</label>
                <input type="text" name="lama_kerja" t-attf-class="form-control #{error.get('lama_kerja') and 'is-invalid' or ''}" t-att-value="lama_kerja or partner.lama_kerja" />
            </div>
            <div t-attf-class="form-group #{error.get('grade') and 'o_has_error' or ''} col-xl-6">
                <label class="col-form-label" for="grade">Grade</label>
                <input type="text" name="grade" t-attf-class="form-control #{error.get('grade') and 'is-invalid' or ''}" t-att-value="grade or partner.grade" />
            </div>
            <div t-attf-class="form-group #{error.get('talent') and 'o_has_error' or ''} col-xl-6">
                <label class="col-form-label" for="talent">Talent</label>
                <input type="text" name="talent" t-attf-class="form-control #{error.get('talent') and 'is-invalid' or ''}" t-att-value="talent or partner.talent" />
            </div>
        </xpath>
</template>

后台表单继承XML

<data>
<record id="view_inherit_modifier_contact" model="ir.ui.view">
    <field name="name">view.inherit.modifier.contact</field>
    <field name="model">res.partner</field>
    <field name="inherit_id" ref="base.view_partner_form"/>
    <field name="arch" type="xml">
       
        <xpath expr="//field[@name ='category_id']" position="after">
            <field name="umur" string="Umur"/>
            <field name="lama_kerja" string="Lama Kerja"/>
            <field name="grade" string="Grade"/>
            <field name="talent" string="Talent"/>
        </xpath>
</field>
</record>
</data>

问题原因及解决方案

1. 门户控制器未处理新增字段

Odoo门户的联系人更新逻辑默认只处理系统原有字段,新增字段未被加入控制器的字段白名单,提交时会被字段校验拦截,触发未知字段错误。

解决代码:
继承门户控制器,重写相关方法添加自定义字段:

from odoo import http
from odoo.http import request
from odoo.addons.portal.controllers.portal import PortalAccount

class CustomPortalAccount(PortalAccount):

    def details_form_validate(self, data):
        error, error_message = super().details_form_validate(data)
        # 可根据需求添加字段校验规则
        if not data.get('umur'):
            error['umur'] = 'missing'
            error_message.append("Umur字段不能为空")
        return error, error_message

    def _prepare_portal_layout_values(self):
        values = super()._prepare_portal_layout_values()
        partner = request.env.user.partner_id
        values.update({
            'umur': partner.umur,
            'lama_kerja': partner.lama_kerja,
            'grade': partner.grade,
            'talent': partner.talent,
        })
        return values

2. 门户用户字段权限缺失

需确保门户用户组拥有自定义字段的读写权限,否则提交时会因权限不足触发字段识别错误。

解决步骤:

  • 在模块security目录的权限文件中添加字段权限配置:
<record id="res_partner_portal_access" model="ir.model.access">
    <field name="name">res.partner.portal.access</field>
    <field name="model_id" ref="base.model_res_partner"/>
    <field name="group_id" ref="base.group_portal"/>
    <field name="perm_read" eval="True"/>
    <field name="perm_write" eval="True"/>
    <field name="perm_create" eval="False"/>
    <field name="perm_unlink" eval="False"/>
</record>
  • 后台进入【设置】-【技术】-【字段】,找到新增的4个字段,编辑并勾选门户组的读写权限。

3. 模板字段赋值优化

模板中t-att-value的写法可简化,直接使用partner.umur更可靠,避免上下文变量冲突:

<input type="text" name="umur" t-attf-class="form-control #{error.get('umur') and 'is-invalid' or ''}" t-att-value="partner.umur" />

其余三个字段同理修改。

验证步骤

  1. 升级模块确保所有代码生效;
  2. 切换到门户用户编辑联系人详情并提交;
  3. 检查后台联系人记录,确认新增字段是否被正确更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:38:11