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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:55:22