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)
感谢您的帮助。请评论,这些解决方案中哪一个在编程上是更好的方法。
我想创建一个配置小部件并将设置存储在数据库中。 我找到了这个主题的 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)
感谢您的帮助。请评论,这些解决方案中哪一个在编程上是更好的方法。