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

Odoo13中One2many字段添加记录后显示为空且出现未定义ID字段问题

问题原因
  1. One2many字段定义逻辑错误
    Odoo中One2many字段的第二个参数必须是关联模型中指向当前模型的Many2one字段。你当前的中间表config.list完全没有指向project.project的关联字段,却将两个One2many的反向关联参数设为了employee_id(关联hr.employee)和choose_role(关联project.roles),类型完全不匹配,保存后系统无法查询到关联当前项目的中间表记录,因此列表为空。
  2. 额外显示ID字段的原因
    你的中间表config.list没有定义_rec_name,也没有自定义name_get方法,Odoo在没有指定显示字段的情况下,会默认调用主键id作为记录的显示名称,因此会出现你没定义的ID字段。
解决方案

1. 修正Python模型定义

修改中间表config.list

新增指向project.project的关联字段,同时自定义name_get解决ID显示问题:

class RolesConfigList(models.Model):
    _name = 'config.list'
    # 新增项目关联字段,作为One2many的反向关联字段
    project_id = fields.Many2one('project.project', string="所属项目")
    employee_id = fields.Many2one('hr.employee', string="员工", required=True)
    choose_role = fields.Many2one('project.roles', string="项目角色", required=True)

    # 自定义记录显示名称
    def name_get(self):
        res = []
        for rec in self:
            res.append((rec.id, f"{rec.employee_id.name or ''} - {rec.choose_role.role_id or ''}"))
        return res

修正project.project继承的One2many字段

你只需要一个One2many字段即可存储「员工+角色」的组合配置,无需定义两个:

class RolesConfig(models.Model):
    _inherit = 'project.project'
    # 反向关联字段改为新增的project_id
    project_role_config_ids = fields.One2many(
        'config.list', 'project_id', string="项目角色配置")

2. 修正XML视图定义

在视图中为One2many字段内嵌tree和form视图,指定要显示的字段,避免调用默认视图:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
  <record id="project_addon_config_roles" model="ir.ui.view">
    <field name="name">view.config.roles</field>
    <field name="model">project.project</field>
    <field name="inherit_id" ref="project.edit_project"/>
    <field name="arch" type="xml">
       <page name="settings" position="after">
        <page name="config_roles" string="Configuration Roles">
          <sheet>
            <group name="config_roles_emp" string="角色配置">
              <field name="project_role_config_ids" string="配置列表" nolabel="0">
                <!-- 内嵌列表视图,可直接行内编辑 -->
                <tree editable="bottom">
                  <field name="employee_id"/>
                  <field name="choose_role"/>
                </tree>
                <!-- 内嵌表单视图,弹窗编辑时使用 -->
                <form>
                  <group>
                    <field name="employee_id"/>
                    <field name="choose_role"/>
                  </group>
                </form>
              </field>
            </group>
          </sheet>
        </page>
       </page>
    </field>
  </record>
</odoo>

修改完成后升级自定义模块即可生效。

内容的提问来源于stack exchange,提问作者for-loop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 07:12:03