Odoo中如何获取并使用另一关联模型中已有的字段值?
是否需要用计算字段实现?
是的,推荐使用计算字段实现。由于yearly_holidays_ids是一对多字段,对应多条hr.employee.yearly.holidays记录,无法直接通过关联(related)字段直接获取聚合值/指定单条记录值,计算字段是最灵活且易维护的实现方式。
具体操作步骤
- 在
hr.employee的继承模型中新增计算字段,通过api.depends指定依赖的关联字段,保证关联数据更新时自动同步取值。 - 在计算方法中按业务需求处理
remaining_count的取值逻辑(求和/取特定年份值等)。
代码示例
from odoo import models, fields, api class HrEmployee(models.Model): _inherit = 'hr.employee' # 你已定义的一对多关联字段 yearly_holidays_ids = fields.One2many('hr.employee.yearly.holidays', 'employee_id') # 新增计算字段:示例为统计所有年度剩余年假总和 total_remaining_holidays = fields.Integer( string='总剩余年假天数', compute='_compute_total_remaining_holidays', store=True # 若需要用于列表视图过滤、分组统计,或降低实时计算开销可开启 ) # 可选新增:仅取当前年度的剩余年假 current_year_remaining_holidays = fields.Integer( string='本年度剩余年假天数', compute='_compute_current_year_remaining_holidays', store=True ) @api.depends('yearly_holidays_ids.remaining_count') def _compute_total_remaining_holidays(self): for employee in self: employee.total_remaining_holidays = sum( employee.yearly_holidays_ids.mapped('remaining_count') ) @api.depends('yearly_holidays_ids.remaining_count', 'yearly_holidays_ids.year') def _compute_current_year_remaining_holidays(self): current_year = fields.Date.today().year for employee in self: current_year_holiday = employee.yearly_holidays_ids.filtered(lambda x: x.year == current_year) employee.current_year_remaining_holidays = current_year_holiday.remaining_count if current_year_holiday else 0
注意事项
- 若关闭
store=True,字段值会在每次调用时实时计算,无需额外存储空间,但大数量级下查询效率会降低 - 依赖的
remaining_count本身是存储型计算字段,修改其计算逻辑后需要手动升级模块触发数据重算,同步更新hr.employee侧的存储型计算字段值
内容的提问来源于stack exchange,提问作者SaltySteven
相关产品推荐
相关产品推荐

