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

时间:2017-06-22 12:44:57

标签: python openerp odoo-10

我想创建一个配置小部件并将设置存储在数据库中。 我找到了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的值也符合预期(我将其写入logoutput,就像:{'my_category': u'100'})。但是,该值在配置向导中不可见。 :(

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

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

2 个答案:

答案 0 :(得分:1)

试试这个

@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)

答案 1 :(得分:0)

我发现了我的错误&在查看logoutput(我在问题中发布)时,几乎是显而易见的:我的方法: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

另一种可能性是将值存储在不同的表中(如用户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)

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