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

Odoo员工对象子女字段添加及显隐控制实现问题求助

你的Odoo员工子女字段实现代码存在的问题分析

核心功能不满足需求:无法支持多子女登记

需求明确要求可登记多个子女,但你当前定义的name_child(字符型)和date_of_birth(日期型)都是单值字段,只能存储一个子女的信息,完全无法实现多子女的登记需求。正确的做法是创建独立的子女模型,再通过One2many字段关联到员工模型,才能支持添加多条子女记录。

onchange逻辑完全错误:用错误方式控制字段可见性

  1. 字段类型不匹配:name_child是Char类型、date_of_birth是Date类型,你却给它们赋值布尔值True/False,这会直接触发类型错误,导致Odoo运行异常,且完全违背字段的设计用途。
  2. 可见性控制方式错误:字段的显示/隐藏不应该通过修改字段值实现,正确方式是在视图XML中使用attrs属性,基于children字段的值来控制对应字段组的可见性。

onchange触发字段冗余

你的onchange装饰器监听了name_child和date_of_birth字段,但这两个字段的变化和可见性控制无关,只需要监听children字段即可,多余的监听会导致不必要的触发,影响性能。


正确实现思路参考

1. 创建子女模型

from odoo import models, fields

class HrEmployeeChild(models.Model):
    _name = 'hr.employee.child'
    _description = 'Employee Child'

    name = fields.Char(string='Name', required=True)
    date_of_birth = fields.Date(string='Date of Birth')
    employee_id = fields.Many2one('hr.employee', string='Employee', required=True, ondelete='cascade')

2. 修改员工模型

from odoo import models, fields

class HrEmployee(models.Model):
    _inherit = 'hr.employee'

    children = fields.Integer(string='Children')
    child_ids = fields.One2many('hr.employee.child', 'employee_id', string='Children')

3. 在视图中控制可见性(XML)

在员工表单视图的「私人信息」标签页中,添加子女的One2many字段,并通过attrs控制可见性:

<field name="children"/>
<group attrs="{'invisible': [('children', '<=', 0)]}">
    <field name="child_ids" widget="one2many_list">
        <tree editable="bottom">
            <field name="name"/>
            <field name="date_of_birth"/>
        </tree>
    </field>
</group>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:30:41