Odoo8年份选择字段默认设为当前年份报错求助
问题原因
你的Selection字段选项中,存储的实际值是整数类型(比如2023),但默认值函数get_year返回的是字符串类型的年份('2023'),类型不匹配导致了ValueError。Odoo的Selection字段要求默认值的类型必须和选项中定义的存储值类型完全一致。
解决方案
提供两种可行的修改方案,任选其一即可:
方案1:修改默认值函数返回整数类型
将get_year函数的返回值改为整数类型的当前年份,和get_years中定义的存储值类型保持一致:
from datetime import datetime # ... def get_year(self): return datetime.now().year # 返回整数类型的年份 year = fields.Selection(get_years(), string='Year', default=get_year)
方案2:修改选项列表的存储值为字符串类型
如果希望存储值保持字符串类型,调整get_years函数,让元组的第一个元素(存储值)也变为字符串:
def get_years(): year_list = [] for i in range(2022, 2036): year_list.append((str(i), str(i))) # 存储值和显示文本都为字符串 return year_list def get_year(self): return str(datetime.now().year) # 保持返回字符串类型 year = fields.Selection(get_years(), string='Year', default=get_year)
验证说明
修改后,默认值的类型和Selection选项的存储值类型完全匹配,即可解决ValueError问题,年份选择功能会正常加载当前年份作为默认值。
内容的提问来源于stack exchange,提问作者Nur Faiz
相关产品推荐
相关产品推荐

