Relaciones entre modelos

Un registro de un modelo puede estar relacionado con un registro de otro modelo.Por ejemplo, un registro de pedido de venta está relacionado con un registro de cliente que contiene los datos del cliente;también está relacionado con sus registros de línea de órdenes de venta.

Ejercicio------------------------------------------------------------------------------------------------------------

Crear un modelo de sesión

Para el módulo Open Academy, consideramos un modelo parasesiones: una sesión es una ocurrencia de un curso enseñado en un momento dado para una audiencia dada.

Cree un modelo para lassesiones.Una sesión tiene un nombre, una fecha de inicio, una duración y un número de asientos.Añada una acción y un elemento de menú para mostrarlos.Haga que el nuevo modelo sea visible a través de un elemento de menú.

  1. Cree la clase _Session _en :openacademy/models/models.py.

  2. Agregar acceso al objeto de sesión enopenacademy/view/openacademy.xml.

openacademy/models.py

name = fields.Char(string="Title", required=True)
    description = fields.Text()


class Session(models.Model):
    _name = 'openacademy.session'

    name = fields.Char(required=True)
    start_date = fields.Date()
    duration = fields.Float(digits=(6, 2), help="Duration in days")
    seats = fields.Integer(string="Number of seats")

openacademy/views/openacademy.xml

<!-- Full id location:
             action="openacademy.course_list_action"
             It is not required when it is the same module -->

        <!-- session form view -->
        <record model="ir.ui.view" id="session_form_view">
            <field name="name">session.form</field>
            <field name="model">openacademy.session</field>
            <field name="arch" type="xml">
                <form string="Session Form">
                    <sheet>
                        <group>
                            <field name="name"/>
                            <field name="start_date"/>
                            <field name="duration"/>
                            <field name="seats"/>
                        </group>
                    </sheet>
                </form>
            </field>
        </record>

        <record model="ir.actions.act_window" id="session_list_action">
            <field name="name">Sessions</field>
            <field name="res_model">openacademy.session</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
        </record>

        <menuitem id="session_menu" name="Sessions"
                  parent="openacademy_menu"
                  action="session_list_action"/>
    </data>
</odoo>

Campos relacionales

Los campos relacionales enlazan registros, ya sea del mismo modelo (jerarquías) o entre diferentes modelos.

Los tipos de campos relacionales son:

Many2one(other_model, ondelete='set null')

Un simple enlace a otro objeto:

print foo.other_id.name

https://www.postgresql.org/docs/9.3/static/tutorial-fk.html

One2many(other_model, related_field)

Una relación virtual, inversa de aMany2one.A seOne2manycomporta como un contenedor de registros, al tener acceso a ello se obtiene un conjunto (posiblemente vacío) de registros:

for other in foo.other_ids:
    print other.name

One2many(other_model, related_field)

Una relación virtual, inversa de aMany2one.A seOne2manycomporta como un contenedor de registros, al tener acceso a ello se obtiene un conjunto (posiblemente vacío) de registros:

for other in foo.other_ids:
    print other.name

Ejercicio------------------------------------------------------------------------------------------------------------

Muchas relaciones

Utilizando many2one, modifique losmodelos_Course_y_Session_para reflejar su relación con otros modelos:

1: Un curso tiene un usuario responsable ; el valor de ese campo es un registro del modelo incorporado res.users.
2: Una sesión tiene un instructor ; el valor de ese campo es un registro del modelo incorporado res.partner.
3: Una sesión está relacionada con un curso ; el valor de ese campo es un registro del modelo openacademy.course y es necesario.
Adaptar las vistas.
Agregue los Many2one campos relevantes a los modelos, y
agregarlos en las vistas.

openacademy/models.py

name = fields.Char(string="Title", required=True)
    description = fields.Text()

    responsible_id = fields.Many2one('res.users',
        ondelete='set null', string="Responsible", index=True)


class Session(models.Model):
    _name = 'openacademy.session'
start_date = fields.Date()
    duration = fields.Float(digits=(6, 2), help="Duration in days")
    seats = fields.Integer(string="Number of seats")

    instructor_id = fields.Many2one('res.partner', string="Instructor")
    course_id = fields.Many2one('openacademy.course',
        ondelete='cascade', string="Course", required=True)

openacademy/views/openacademy.xml

<sheet>
                        <group>
                            <field name="name"/>
                            <field name="responsible_id"/>
                        </group>
                        <notebook>
                            <page string="Description">

results matching ""

    No results matching ""