当前位置: 代码迷 >> 综合 >> odoo res.config.settings配置模型添加多对多字段,保存问题
  详细解决方案

odoo res.config.settings配置模型添加多对多字段,保存问题

热度:32   发布时间:2024-02-09 04:07:48.0

在 odoo 中,res.config.settings配置模型,
自己写的字段,会产生保存打开没有值的情况,这种情况比较常见,像char,Many2one,Selection,Boolean ,Integer等类型的字段可以直接 config_parameter设置,保证下次打开时,值还是存在的

ebay_zip_code = fields.Char(string="Zip", default='', config_parameter='ebay_zip_code')
ebay_gallery_plus = fields.Boolean("Gallery Plus", default='', config_parameter='ebay_gallery_plus')
...

但是 对于 多对多 Many2many 字段的存值就比较麻烦,目前找到一种方式可以实现,但不是最理想的,

直接上代码

class ResConfigSettings(models.TransientModel):_inherit = 'res.config.settings'product_categ_id = fields.Many2many('product.category', string='产品类别', compute="_compute_product_categ_id", inverse="_inverse_product_categ_id")product_categ_str = fields.Char(config_parameter='crm.product_categ_str')@api.depends('product_categ_str')def _compute_product_categ_id(self):for setting in self:if setting.product_categ_str:setting_id = setting.product_categ_str.split(',')for rec in setting_id[0:len(setting_id)-1]:product = self.env['product.category'].search([('id', '=', int(rec))])setting.write({'product_categ_id':[(4, product.id, None)]})def _inverse_product_categ_id(self):str = ''for setting in self:if setting.product_categ_id:for rec in setting.product_categ_id:str += '%s,' % rec.idsetting.product_categ_str = str
...

就是用 _inverse_product_categ_id 方法保存的是把 product_categ_id 值的 id 存到 product_categ_str 里面,然后在 compute 里面再赋值给 product_categ_id

说白了,就是把值赋给另一个字段,然后取出来。

此方法仅供参考

  相关解决方案