Odoo 10 自定义模块配置向导不存储设置

Odoo 10 Custom Module Configuration Wizard not storing the settings

我想创建一个配置小部件并将设置存储在数据库中。 我找到了这个主题的 this odoo development documentation,但它似乎不起作用...

我的 python 代码如下所示:

class Configuration(models.TransientModel):
  _name = 'my.config'

  _inherit = 'res.config.settings'

  my_category = fields.Many2one('product.category', 'My Special Product Category')

  def get_default_params(self, fields):
    res = {}
    res['my_category'] = self.env['ir.config_parameter'].get_param('my_category', '').strip()
    return res

  @api.multi
  def set_my_config(self):
    self.ensure_one()
    value = getattr(self, 'my_category', '')
    self.env['ir.config_parameter'].set_param('my_category', value.id)

方法 get_default_params 按预期调用,res 的值也按预期调用(我将其写入日志输出,就像:{'my_category': u'100'})。但是,该值在配置向导中不可见。 :(

我现在尝试了一种解决方法,包括另一个字段 'company_id' 并设置 my_category 的值 onchange of company_id (一旦向导打开就会触发。这个解决方案有效,但我不确定这是否是一个合适的解决方案。

关于我在文档中描述的方法中做错了什么有什么建议吗?

试试这个

@api.multi
def set_my_category_defaults(self):
    return self.env['ir.values'].sudo().set_default(
        'ir.config_parameter', 'my_category', self.my_category.id)

我发现了我的错误,当我查看日志输出(我在问题中发布)时,它几乎是显而易见的:我的方法:get_default_params 不起作用的原因是因为返回的结果是一个字符串({'my_category': u'100'} 但它希望整数能够正常工作 {'my_category': 100}

所以在投射结果时,我的向导按预期工作:)

def get_default_params(self, fields):
    res = {}
    cat = self.env['ir.config_parameter'].get_param('my_category', '').strip()
    if cat:
        res['my_category'] = int(cat)
    return res

另一种可能性是将值存储在不同的 table 中(正如用户 ashvin 所建议的)-> 然后获取的值将已经是整数,并且不需要转换:

def get_default_params(self, fields):
    res = {}
    res['my_category'] = self.env['ir.values'].get_default('my.config', 'my_category')
    return res

@api.multi
def set_my_category_defaults(self):
    return self.env['ir.values'].sudo().set_default(
        'my.config', 'my_category', self.my_category.id)

感谢您的帮助。请评论,这些解决方案中哪一个在编程上是更好的方法。