Guía: Campos de Odoo
Completo tutorial con todo lo que hay que saber sobre campos en Odoo
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 )
Acerca de:
Ignacio Buioli
Licenciado en Artes Multimediales. Ha desarrollado numerosos proyectos de Multimedia así como también escrito artículos y traducido textos del mencionado tema. En Moldeo Interactive es Socio y Programador; encargándose, además, de gran parte de las redes y los cursos online.