最近踩坑才发现odoo的时间和日期字段用在字段的默认值时需要注意一个地方, 如果没注意,时间默认值可能会出现默认时间不对的问题
如果是时间和日期字段默认值可以使用fields.Date.today和fields.Datetime.now作为默认值,示例如下:
field_date = fields.Date(default=fields.Date.today)
field_datetime = fields.Datetime(default=fields.Datetime.now)
这样就不需要再定义函数使用datetime库去获取了日期和时间默认值了,但是需要注意的是:如果你的默认值写成了下面这样:
field_date = fields.Date(default=fields.Date.today())
field_datetime = fields.Datetime(default=fields.Datetime.now())
细心的朋友肯定一眼就看出问题所在了 , 如果你使用的是下面这种fields.Date.today()和fields.Datetime.now()这种带括号的, 你会发现你的日期和时间字段会出现默认值不对的情况
原因是:带括号fields.Date.today()和fields.Datetime.now()的是调用的方法,而这个方法时获取系统启动的日期和时间, 而不是当前时间和日期,这就是问题所在了, 而不带括号的fields.Date.today和fields.Datetime.now是调用的属性,两者完全是不一样的,调用属性,他会在你创建时才获取时间和日期,而调用方法的方式,你生成模型的时候,就已经调用写入默认值了