# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import fields, models class X2MDemo(models.Model): _name = "x2m.demo" _description = "X2Many Demo" name = fields.Char() line_ids = fields.One2many("x2m.demo.line", "demo_id") def _open_x2m_matrix(self, view_xmlid): wiz = self.env["x2m.matrix.demo.wiz"].create({}) view_id = self.env.ref( "web_widget_x2many_2d_matrix_example.%s" % view_xmlid, ).id return { "name": "Try x2many 2D matrix widget", "type": "ir.actions.act_window", "view_type": "form", "view_mode": "form", "res_model": "x2m.matrix.demo.wiz", "target": "new", "res_id": wiz.id, "view_id": view_id, "context": self.env.context, } def open_x2m_matrix(self): return self._open_x2m_matrix("x2many_2d_matrix_demo") def open_x2m_matrix_selection(self): return self._open_x2m_matrix("x2many_2d_matrix_demo_selection") def open_x2m_matrix_many2one(self): return self._open_x2m_matrix("x2many_2d_matrix_demo_many2one") class X2MDemoLine(models.Model): _name = "x2m.demo.line" _description = "X2Many Demo Line" name = fields.Char() demo_id = fields.Many2one("x2m.demo") user_id = fields.Many2one("res.users") value = fields.Integer() value_selection = fields.Selection([("val1", "Value 1"), ("val2", "Value 2")],) value_many2one = fields.Many2one("res.groups")