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

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的计划任务实现:

  1. 进入Odoo后台,依次打开 设置 > 技术 > 自动化 > 计划动作
  2. 创建新的计划动作:
    • 模型选择: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:43:11