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

Odoo 10日期字段无法自动更新为当日日期的技术咨询

嘿,这个问题我之前也碰到过类似的,你现在用default参数的话,只会在创建记录的那一刻设置当前日期,之后字段值就固定在数据库里了,不会自动更新。给你两个针对性的解决方案,你可以根据自己的业务需求选:

方案1:用计算字段实现实时更新

如果你的需求是每次打开记录都看到当天的日期,不需要把这个值存在数据库里,那用计算字段最适合。修改你的字段定义和添加计算方法:

from odoo import models, fields, api

class YourModelName(models.Model):
    _name = 'your.model.name'  # 替换成你的模型名称
    
    current_day = fields.Date(string='Current Day', compute='_compute_current_day', store=False)

    @api.multi
    def _compute_current_day(self):
        today = fields.Date.today()
        for record in self:
            record.current_day = today
  • 这里store=False表示这个字段不会被存储到数据库,每次打开记录或者刷新页面时,Odoo都会调用_compute_current_day方法重新计算当天日期,保证显示的永远是最新的。
  • 如果之后需要基于这个字段做筛选或者报表,这种实时计算的方式也能满足需求,因为搜索时会动态计算值。
方案2:用定时任务实现每日批量更新

如果需要把current_day的值存储在数据库里,并且每天自动更新所有记录的这个字段(比如要基于这个存储值做后续业务逻辑),那可以用Odoo的定时任务(Cron Job):

第一步:更新模型代码

先调整字段定义,并添加一个批量更新的方法:

from odoo import models, fields, api

class YourModelName(models.Model):
    _name = 'your.model.name'  # 替换成你的模型名称
    
    current_day = fields.Date(string='Current Day')

    @api.model
    def update_all_current_day(self):
        # 搜索所有记录并更新current_day为当天日期
        self.search([]).write({'current_day': fields.Date.today()})

第二步:配置定时任务

在你的模块XML文件里添加定时任务的配置(记得替换model_your_model_name为你对应模型的外部ID):

<odoo>
    <data noupdate="0">
        <record id="ir_cron_update_current_day" model="ir.cron">
            <field name="name">每日更新Current Day字段</field>
            <field name="model_id" ref="model_your_model_name"/>
            <field name="state">code</field>
            <field name="code">model.update_all_current_day()</field>
            <field name="interval_number">1</field>
            <field name="interval_type">days</field>
            <field name="numbercall">-1</field>  <!-- 表示无限次重复执行 -->
            <!-- 设置每天凌晨0点执行,你可以根据需要调整时间 -->
            <field name="nextcall" eval="(datetime.datetime.now() + datetime.timedelta(days=1)).strftime('%Y-%m-%d 00:00:00')"/>
            <field name="user_id" ref="base.user_root"/>  <!-- 用管理员权限执行 -->
        </record>
    </data>
</odoo>
  • 这个定时任务会每天凌晨0点自动调用update_all_current_day方法,把所有该模型记录的current_day字段更新为当天日期。
  • 如果你需要测试,可以手动在Odoo后台的「设置 -> 技术 -> 自动化 -> 定时任务」里找到这个任务,点击「立即运行」看效果。

两种方案怎么选?

  • 只是需要显示当天日期,不需要存储:选方案1,更轻量,实时准确。
  • 需要把日期存在数据库,用于统计、关联其他逻辑:选方案2,保证每天自动更新存储值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:11:17