如何在 set_values 方法 odoo 14 中保存 one2many 字段

Posted

技术标签:

【中文标题】如何在 set_values 方法 odoo 14 中保存 one2many 字段【英文标题】:How to save one2many field in set_values method odoo 14 【发布时间】:2021-06-29 14:30:12 【问题描述】:

我正在使用 odoo 14 并在“res.config.settings”中添加了 one2many 字段。但是这个字段值在保存这个 res.config.settings 表单时显示为 false。

下面是我的代码:-

class ProjectResConfigSettings(models.TransientModel):
    _inherit = 'res.config.settings'

    hide_export_field = fields.One2many('export.hide', 'res_id', string='Hide Field')


    def set_values(self):
        super(ProjectResConfigSettings, self).set_values()
        IrDefault = self.env['ir.default'].sudo()
        IrDefault.set('res.config.settings', 'hide_export_field', self.hide_export_field.ids)


class ExportHideFields(models.Model):
    _name = "export.hide"

    res_id = fields.Integer(string="Resend wizard")
    model_ids = fields.Many2one('ir.model', string='Model')
    field_for_hide = fields.Many2many('ir.model.fields', string='Field For Hide')

提前致谢。

【问题讨论】:

你实现了getter吗? 嗨 Danimar,不明白你的建议? 【参考方案1】:

Odoo 模型 res.config.settings 不能有 One2many 字段,或者它不应该。此外,要在视图中显示值,您必须继承 get_param 方法并将您的字段添加到响应中。

from ast import literal_eval


class ProjectResConfigSettings(models.TransientModel):
    _inherit = 'res.config.settings'

    hide_export_field = fields.Many2many('export.hide', string='Hide Field')

    @api.model
    def get_values(self):
        res = super(ProjectResConfigSettings, self).get_values()
        get_param = self.env['ir.config_parameter'].sudo().get_param
        hide_export_field = get_param('hide_export_field', '[]')
        hide_export_field = [(6, 0, literal_eval(hide_export_field))]
        res.update(hide_export_field=hide_export_field)
        return res

    def set_values(self):
        res = super(ProjectResConfigSettings, self).set_values()
        set_param = self.env['ir.config_parameter'].sudo().set_param
        set_param('hide_export_field', self.hide_export_field.ids)
        return res


class ExportHideFields(models.Model):
    _name = "export.hide"

    res_id = fields.Integer(string="Resend wizard")
    model_ids = fields.Many2one('ir.model', string='Model')
    field_for_hide = fields.Many2many('ir.model.fields', string='Field For Hide')

【讨论】:

嗨@Tiki,感谢您的回复。我试过了,但它不起作用。 它在 many2many 中运行良好。但是为什么要求与one2many有关。我们可以有这样的选项:IrDefault.set('export.hide', 'hide_export_field', self.hide_export_field.ids)

以上是关于如何在 set_values 方法 odoo 14 中保存 one2many 字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Odoo 14 中隐藏过滤器

如何在 ODOO-14 中激活开发者模式.....?

如何在odoo 14的打印菜单中隐藏报告?

如何在 odoo 14 中更改 OrderReceipt

odoo 14 如何获取选定的记录

odoo14-实际使用