Crear vista de lista o tree en OpenERP (Odoo)

Una de las varias vistas o modelos de vistas en OpenERP (Odoo), es la vista tree o vista de lista, donde aparecen los registros de lo que se quiere visualizar en forma de lista de manera ordenada, bien sea alfabéticamente o por otro orden específico, número de algún código especial, cantidad, entre otros.

Inicialmente, debemos tener en cuenta que para crear una vista de lista, se debe tener un solo campo que relacione varios campos, es decir, dentro de una tabla de la base de datos debe estar creado un dato que llame los campos que se desean reflejar en la vista, por ejemplo, dentro del tabla1.py tengo los campos para datos personales:

# -*- coding: utf-8 -*-

import time
from openerp.osv import fields, osv

class tabla1(osv.Model):
    _name = 'objeto.tab1'
    _description = 'Tabla principal donde guardo datos personales y llamo todos los datos externos'
    _columns = {
        'name': fields.char('Nombre de la vista'),
        'fecha_nac': fields.date('Fecha de nacimiento'),
        'telefono': fields.char('Télefono'),
        'e_mail': fields.char('Correo electrónico'),
        'direccion': fields.char('Dirección'),
        'exp_laboral': fields.one2many('objeto.tab2','name','Empresas')
    }

Y dentro del archivo tabla2.py guardo los datos secundarios, quizás información de experiencia laboral, por ejemplo:

# -*- coding: utf-8 -*-

import time
from openerp.osv import fields, osv

class tabla2(osv.Model):
    _name = 'objeto.tab2'
    _description = 'Tabla secundaria guardar los campos de experiencia laboral'
    _columns = {
        'name': fields.many2one('Experiencia laboral'),
        'nom_empresa': fields.char('Nombre de la empresa'),
        'cargo': fields.char('Cargo'),
        'telefono': fields.char('Teléfono'),
        'direccion': fields.char('Dirección'),
        'e_mail': fields.char('Correo electrónico'),
        'website': fields.char('Página web',size=100)
    }

La idea es mostrar los campos que tengo en objeto.tab2 cuando haga el llamado en un formulario u otra vista como la vista lista, en el archivo vista.xml se hará dicho llamado de la siguiente manera:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
	<data>
		<record id="vista_lista_1" model="ir.ui.view">
			<field name="name">vista.lista.1</field>
			<field name="model">objet.tab1</field>
			<field name="arch" type="xml">
				<form version="7.0">
					<field name="name"/>
					<field name="fecha_nac"/>
					<field name="telefono"/>
					<field name="e_mail"/>
					<field name="direccion"/>
					<notebook>
						<page string="Experiencia laboral">
							<field name="exp_laboral">
								<tree>
									<field name="name"/>
									<field name="nom_empresa"/>
									<field name="cargo"/>
									<field name="telefono"/>
									<field name="direccion"/>
									<field name="e_mail"/>
									<field name="website"/>
								</tree>
							</field>
						</page>
					</notebook>
				</form>
			</field>
		</record>
	</data>
</openerp>

El campo exp_laboral está ubicado en la tabla objeto.tab1, hace la referencia e incluye en su contenido los campos que están en la tabla objeto.tab2, igualmente, se debe hacer referencia y tener en cuenta el tipo de campo que se utiliza, en este caso se usó one2many en la primera tabla para llamar o incluir los campos de la segunda tabla haciendo referencia en el campo name que es de tipo many2one.

Las clases pudieran estar ubicadas en el mismo archivo .py sin problemas, para efectos del ejemplo los coloqué en dos archivos diferentes.

Advertisements

About felixurbina

Humano con todos los defectos y virtudes que vienen de fábrica.
This entry was posted in Odoo, OpenERP. Bookmark the permalink.

7 Responses to Crear vista de lista o tree en OpenERP (Odoo)

  1. David says:

    Una consulta, si deseo ordenar los campos en el tree, es que me salen desordenados y ocupo ponerlos agrupados o al menos ordenados. Si no es mucha molestia, le agredezco su respuesta.

  2. Samuel Sa says:

    Que tal, aunque el ejemplo ya tiene un poco de rato, mi pregunta es si yo quisiera listar a las personas y su experiencia, pero en otro contexto, es decir, digamos que tengo un listado de empresas y al darle click a una empresa pudiera visualizar debajo del detalle de la empresa el listado de personas y su experiencia laboral? en este caso seria odoo 10?

    • felixurbina says:

      Hola Samuel. Pues sí, puedes hacer cualquier situación que se te ocurra, por empresas también, solo es crear la vista y la tabla relacionada quizás con RRHH de la base de datos que te permita enlazar la experiencia de cada persona y relacionarla con la empresa a la que pertenece, solo se me ocurre esa idea por ahora, pero hay muchos mecanismos. En Odoo 10 todavía no veo el código, pero en Odoo 9 habían cambiado algunas clases y métodos para hacer las cosas que vi, estaban un poco más sencillas, supongo que Odoo 10 las aprovechó también.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s