Odoo 16中如何每日自动将date_to字段计算为当日日期
实现员工调动历史日志date_to字段每日自动更新的方法
初始设置:给date_to字段赋初始值
先修改你的_prepare_transfer_history方法,在创建调动历史记录时把date_to初始化为当天日期:
def _prepare_transfer_history(self): self.ensure_one() return { 'employee_id': self.employee_id.id, 'work_loc_from': self.employee_id.work_location_id.id, 'work_loc_to': self.location_to.id, 'date_from': date.today(), 'date_to': date.today(), # 初始化当天日期 'salary': self.salary, }
方案一:用计划任务每日自动更新(持久化存储场景)
如果需要让数据库中date_to字段每天自动更新为当天日期(适合需要保留更新记录的场景),可以通过Odoo的计划任务实现:
- 进入Odoo后台,依次打开 设置 > 技术 > 自动化 > 计划动作
- 创建新的计划动作:
- 模型选择:
employee.transfer.history - 动作类型:执行Python代码
- 执行频率:设置为每天一次(比如每天凌晨0点执行)
- 填写执行的Python代码:
from datetime import date # 筛选出date_to小于当天的记录并更新 records = self.search([('date_to', '<', date.today())]) records.write({'date_to': date.today()})
- 模型选择:
这个任务会每天自动运行,把所有date_to早于当天的调动历史记录更新为当天日期。
方案二:用计算字段动态显示当天日期(非持久化场景)
如果不需要把date_to的值存在数据库中,只是在界面显示时展示当天日期,可以把employee.transfer.history模型中的date_to定义为计算字段:
from datetime import date from odoo import fields, models, api class EmployeeTransferHistory(models.Model): _name = 'employee.transfer.history' _description = 'Employee Transfer History' # 其他字段定义... date_to = fields.Date(string='结束日期', compute='_compute_date_to') @api.depends() def _compute_date_to(self): today = date.today() for record in self: record.date_to = today
这种方式下,每次打开记录或刷新页面时,date_to都会自动显示当天日期,不需要后台任务维护,适合只需要实时显示当前日期的场景。
内容的提问来源于stack exchange,提问作者Abdullah Elshoura
相关产品推荐
相关产品推荐

