Guía: Campos de Odoo

Completo tutorial con todo lo que hay que saber sobre campos en Odoo

Ignacio Buioli
- 15/12/2018

A partir de la nueva API de Odoo, la que llegó con Odoo 8, los campos no poseen el mismo formato. Y aunque internamente hacen lo mismo, nunca están de más las guías que nos sirvan de ayuda a la hora de aventurarnos en el mundo de los campos de Odoo. Eso es lo que traemos en esa oportunidad, al final de la entrada del Blog dejamos dos videos que hicimos, donde se explican los conceptos de esta entrada con soporte visual.

Tipos de Campos

Boolean

field_bool = fields.Boolean()

Se representa en las vistas como un Checkbox y puede contener solo un valor False o True. Por defecto será False.

Char

field_char = fields.Char()

Se representa en las vistas como un Input de HTML y puede almacenar textos cortos.

Text

field_text = fields.Text()

Se representa en las vistas como un Textarea de HTML y permite almacenar textos largos.

HTML

field_html = fields.Html()

Se representa en las vistas como un Textarea con un Widget de HTML, permite almacenar textos enriquecidos con HTML.

Integer

field_int = fields.Integer()

Se representa en las vistas como un Input numérico de HTML, permite almacenar números enteros. Por defecto será 0.

Float

field_float = fields.Float()

Se representa en las vistas como un Input de HTML, permite almacenar números flotantes (decimales). Por defecto será 0.0.

Date

field_date = fields.Date()

Se representa en las vistas como un calendario con selección. Permite almacenar una fecha en particular.

Binary

field_binary = fields.Binary()

Almacena datos codificados en base64, ideal para información de imágenes

Selection

field_selection = fields.Selection([('a', 'A'),('b', 'B')])

Se presenta en las vistas como un Select de HTML. Permite mostrar una serie de opciones a elegir, las cuales tendrán a su vez una referencia. Recibe una List de Python compuestas por elementos con dos valores tipo String. El primer corresponde a la referencia y el segundo al dato a mostrar.

Reference

field_reference = fields.Reference([('model_name', 'String')])

Almacena una referencia arbitraria a un modelo.

Many2one

field_many2one = fields.Many2one('res.partner')

Se representa como un menú desplegable que permite elegir un componente perteneciente al modelo relacionado. Recibe un modelo (en formato String).

One2many

field_one2many = fields.One2many('res.partner', 'rel_id')

Se representa como una tabla a completar. Permite almacenar una relación entre un modelo y un campo en formato de columnas. Recibe el nombre del modelo que llenará la tabla y un campo Many2one que le sirva de relación. Si el Many2one permite entre muchos registros de un Modelo elegir uno, el One2many permite elegir de un Modelo muchos registros. La vista de la tabla puede ser editada.

Many2many

field_many2many = fields.Many2many('res.partner')

Se representa como una tabla, pero a diferencia del One2many, el Many2many permite elegir muchos registros de una sola vez en lugar de agregarlos de uno.

Campo con valor por Defecto

Es posible asignar un valor por Defecto a cualquier campo, mediante la propiedad default, e incluso calcularla a través de una función de Python:

field_char = fields.Char(default='Nombre por Defecto')

field_char = fields.Char(default=funcion_default)

def funcion_default(self):
    return 'Valor Default'

Campo Computado

Además de asignarle un valor por defecto, es posible calcular dicho valor conviritendo el campo en computado con una función de Python:

computado = fields.Float(compute='compute_fun')

def compute_fun(self):
    self.computado = x

Propiedades de los Campos

campo = fields.Char(
        string="Nombre",                # Nombre del label del campo
        compute="_funcion_computada",   # Transforma el campo en un campo computado
        store=True                      # Si es computado, almacena el resultado
        select=True                     # Fuerza la indexación del campo
        readonly=True,                  # Field will be readonly in views
        inverse="_funcion_inverse"      # Trigger para actualizar
        required=True,                  # El campo será obligatorio en las vistas
        translate=True,                 # Traducción disponible
        help='Ayuda de Campo',          # Texto de Ayuda del Campo al pasar el cursor por encima del mismo
        company_dependent=True,         # Transforma las columnas en ir.property
        search='_funcion_busqueda'      # Funcion personalizada para la búsqueda, normalmente empleado junto al computado
    )