我想创建一个配置小部件并将设置存储在数据库中。 我找到了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(一旦打开向导就会触发。这个解决方案有效,但我不确定这是否是一个合适的解决方案
有什么建议我在文档中描述的方法做错了吗?
答案 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)
感谢您的帮助。请评论,这些解决方案中的哪一个以编程方式是更好的方法。