Odoo13中One2many字段添加记录后显示为空且出现未定义ID字段问题
问题原因
- One2many字段定义逻辑错误
Odoo中One2many字段的第二个参数必须是关联模型中指向当前模型的Many2one字段。你当前的中间表config.list完全没有指向project.project的关联字段,却将两个One2many的反向关联参数设为了employee_id(关联hr.employee)和choose_role(关联project.roles),类型完全不匹配,保存后系统无法查询到关联当前项目的中间表记录,因此列表为空。 - 额外显示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
相关产品推荐
相关产品推荐

