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
相关产品推荐
相关产品推荐

