Odoo自定义模块res.config.settings配置字段test_field无法保存如何解决
问题原因
- 核心问题是你代码中调用的
self.env.ref('test_config', False)永远返回False:你没有在模块中定义test_config这个外部ID对应的配置存储记录,导致set_values没有写入对象,get_values也读不到值,所以刷新页面后配置消失。 - 你不需要手动重写
get_values和set_values方法,Odoo的res.config.settings内置了配置自动读写能力,直接通过字段的config_parameter参数指定存储键名即可,代码更简洁也不容易出错。
修复方案
你只需要修改./models/res_config_settings.py的代码,删除自定义的读写方法,给字段增加config_parameter参数即可:
from odoo import fields, models class ResConfigSettings(models.TransientModel): _inherit = "res.config.settings" test_field = fields.Char( string="Test Field", # 前缀替换为你模块的技术名,避免和其他模块的配置键冲突 config_parameter="odoo_abcdefg_test_module.test_field" )
Odoo会自动把该字段的值存储到系统参数表ir.config_parameter中,不需要手动处理保存和读取逻辑,原有视图、清单文件的代码都不需要修改。
可选方案:保留自定义存储逻辑的修改方法
如果你确实需要用自定义模型存储配置而非系统参数,你需要补充两个操作:
- 新增自定义持久化模型,定义
test_field字段用于存储配置 - 在模块的data目录新增XML文件,创建该模型的记录并指定外部ID为
test_config,同时将该XML文件加入__manifest__.py的data列表中
验证方式
修改代码后升级你的模块,进入配置页填写值保存后刷新页面,配置就会正常保留,你也可以在设置 > 技术 > 系统参数中找到对应键名的存储值。
内容的提问来源于stack exchange,提问作者dloy
相关产品推荐
相关产品推荐

