Odoo员工对象子女字段添加及显隐控制实现问题求助
你的Odoo员工子女字段实现代码存在的问题分析
核心功能不满足需求:无法支持多子女登记
需求明确要求可登记多个子女,但你当前定义的name_child(字符型)和date_of_birth(日期型)都是单值字段,只能存储一个子女的信息,完全无法实现多子女的登记需求。正确的做法是创建独立的子女模型,再通过One2many字段关联到员工模型,才能支持添加多条子女记录。
onchange逻辑完全错误:用错误方式控制字段可见性
- 字段类型不匹配:
name_child是Char类型、date_of_birth是Date类型,你却给它们赋值布尔值True/False,这会直接触发类型错误,导致Odoo运行异常,且完全违背字段的设计用途。 - 可见性控制方式错误:字段的显示/隐藏不应该通过修改字段值实现,正确方式是在视图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
相关产品推荐
相关产品推荐

