Skip to content

Relaciones entre Modelos

En este tutorial se crearán las relaciones entre los modelos Project y Task, se utilizarán campos relacionales de acuerdo a los estándares de modelos de Odoo.

Modelos Relacionados

  1. Crea el campo relacional de la figura para el modelo Project en el archivo project.py.

    from odoo import models, fields, api, exceptions
    class Project(models.Model):
    _name = "project_"
    _description = "Modelo Project"
    name = fields.Char(string="Nombre")
    description = fields.Char(string="Descripción")
    start_date = fields.Date(string="Fecha de Inicio", default=fields.Date.today)
    end_date = fields.Date(string="Fecha de Fin")
    days = fields.Integer(string="Dias", compute="_compute_days")
    task_ids = fields.One2many(
    comodel_name="task_", inverse_name="project_id", string="Tareas"
    )
  2. Crea el campo relacional de la figura para el modelo Task en el archivo task.py.

    from odoo import models, fields, api, exceptions
    class Task(models.Model):
    _name = "task_"
    _description = "Modelo Task"
    name = fields.Char(string="Name")
    state = fields.Selection(
    string="State",
    selection=[
    ("1", "Draft"),
    ("2", "Progress"),
    ("3", "Done"),
    ("4", "Canceled"),
    ],
    )
    project_id = fields.Many2one(comodel_name="project_", string="Proyecto")
  3. Actualice la vista del modelo Project en el archivo project_views.xml

    <?xml version='1.0' encoding='utf-8'?>
    <odoo>
    <record id="project_list" model="ir.ui.view">
    <field name="name">project.list</field>
    <field name="model">project_</field>
    <field name="arch" type="xml">
    <list>
    <field name="name" />
    <field name="start_date" />
    <field name="end_date" />
    <field name="days"/>
    </list>
    </field>
    </record>
    <record id="project_form" model="ir.ui.view">
    <field name="name">project.form</field>
    <field name="model">project_</field>
    <field name="arch" type="xml">
    <form>
    <sheet>
    <group>
    <field name="name" />
    <field name="description" />
    <field name="start_date" />
    <field name="end_date" />
    <field name="task_ids" />
    </group>
    </sheet>
    </form>
    </field>
    </record>
    <record id="project_action" model="ir.actions.act_window">
    <field name="name">Proyectos</field>
    <field name="res_model">project_</field>
    <field name="view_mode">list,form</field>
    </record>
    </odoo>
  4. Actualice la vista del modelo Task en el archivo task_views.xml

    <?xml version='1.0' encoding='utf-8'?>
    <odoo>
    <record id="task_list" model="ir.ui.view">
    <field name="name">task.list</field>
    <field name="model">task_</field>
    <field name="arch" type="xml">
    <list>
    <field name="name" />
    <field name="state" />
    <field name="task_count"/>
    <field name="project_id" />
    </list>
    </field>
    </record>
    <record id="task_form" model="ir.ui.view">
    <field name="name">task.form</field>
    <field name="model">task_</field>
    <field name="arch" type="xml">
    <form>
    <sheet>
    <group>
    <field name="name" />
    <field name="state" />
    <field name="project_id" />
    </group>
    </sheet>
    </form>
    </field>
    </record>
    <record id="task_action" model="ir.actions.act_window">
    <field name="name">Tareas</field>
    <field name="res_model">task_</field>
    <field name="view_mode">list,form</field>
    </record>
    </odoo>
  5. Reinicie el servidor de Odoo y actualice el módulo.