Odoo 13设置日期字段默认值出现日期格式不匹配错误求助
错误原因
- 字段默认值参数使用错误:Odoo的字段
default参数如果要指定函数作为默认值,直接传入函数对象即可,不需要加引号。你当前写法传入的是字符串'_set_default_date',Odoo会尝试将这个字符串解析为日期格式,最终触发格式不匹配报错。 - 方法内部变量未定义:
_set_default_date方法中直接使用了未声明的year、month变量,即使默认值参数改对也会触发变量不存在的报错。 - 缺失date类导入:你当前只导入了
datetime,没有导入date类,直接调用date()构造对象会触发名称错误。
正确实现方案
完整可运行代码如下:
from datetime import date from calendar import monthrange from odoo import models, fields class Whatever(models.Model): _name = 'your.model.name' # 替换为你实际的模型标识 end_date = fields.Date( string='End date', default=lambda self: self._set_default_date() ) def _set_default_date(self): # 取当前日期的年、月 today = date.today() # 计算当月总天数 last_day = monthrange(today.year, today.month)[1] # Odoo Date字段原生支持date类型返回值,无需手动转字符串 return date(today.year, today.month, last_day)
补充简化写法:如果你的环境引入了dateutil工具库,也可以用更简洁的逻辑计算当月最后一天,自动适配不同月份的最大天数:
from dateutil.relativedelta import relativedelta def _set_default_date(self): return date.today() + relativedelta(day=31)
内容的提问来源于stack exchange,提问作者for-loop
相关产品推荐
相关产品推荐

