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

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中,不需要手动处理保存和读取逻辑,原有视图、清单文件的代码都不需要修改。

可选方案:保留自定义存储逻辑的修改方法

如果你确实需要用自定义模型存储配置而非系统参数,你需要补充两个操作:

  1. 新增自定义持久化模型,定义test_field字段用于存储配置
  2. 在模块的data目录新增XML文件,创建该模型的记录并指定外部ID为test_config,同时将该XML文件加入__manifest__.py的data列表中
验证方式

修改代码后升级你的模块,进入配置页填写值保存后刷新页面,配置就会正常保留,你也可以在设置 > 技术 > 系统参数中找到对应键名的存储值。

内容的提问来源于stack exchange,提问作者dloy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:24:07