Tipos de campo en Odoo 16

En esta entrada de blog vamos a explicar las características los distintos tipos de campo permitidos en Odoo 16.

Los tipos de campo permitidos en Odoo 16 se pueden agrupar en tres categorías:

  • Campos básicos: booleano, cadena de caracteres, entero y punto flotante.
  • Campos avanzados: fecha, binario, imagen, monetario, selección, texto, HTML, campos pseudo-relacionales, campos calculados, campos relacionados.
  • Campos relacionales: Many2one, One2many y Many2many.
  • Campos automáticos de registro de acceso: Model.create_date, Model.create_uid, Model.write_date y Model.write_uid que se configuran y actualizan automáticamente si _log_access está habilitado. Se puede deshabilitar para evitar crear o actualizar aquellos campos en tablas para los que no son útiles.

Campos básicos

Boolean

Este tipo de campo solo admite dos posibles valores: verdadero o falso.

boolean_field = fields.Boolean()

Char

Tipo de campo formado por una cadena de caracteres de longitud limitada, que se puede ajustar a través de parámetros.

char_field = fields.Char()

Opciones especificas:

  • Size: determina el número máximo de caracteres.
  • Translate: indica que el campo puede ser traducido

Integer

Tipo de campo que guarda valores numéricos enteros. Si el valor no está establecido, se considera 0.

int_field = fields.Integer()

Float

Tipo de campo que almacena valores decimales. Si el valor no está establecido, se considera 0,0.

float_field = fields.Float()
float_field = fields.Float(digits=(32, 32))
float_field = fields.Float(digits=lambda cr: (32, 32))

Digits permite fijar el número dígitos. El parámetro puede ser una tupla (dígitos de la parte entera, dígitos de la parte decimal) o una llamada que devuelve una tupla.

Campos avanzados

Date

Tipo de campo que permite almacenar fechas.

date_field = fields.Date()

Opciones específicas:

  • context_today: devuelve la fecha del día actual, está basado en la zona horaria.
  • today: devuelve la fecha actual en formato cadena.
  • from_string: devuelve el valor datetime.date() en tipo cadena.
  • to_string: retorna el valor de la función datetime.date en formato cadena.

Datetime

Tipo de campo que almacena valores de fecha y hora.

datetime_field = fields.Datetime()

Opciones específicas:

  • context_timestamp: devuelve la fecha y hora actual, basado en el formato de zona horaria.
  • Now: devuelve la fecha y hora actual del sistema.
  • from_string: devuelve el valor datetime.date() en tipo cadena.
  • To_string: devuelve el valor de la función datetime.date en formato cadena.

Binary

Tipo de campo que almacena valores codificados en base64.

binary_field = fields.Binary()

Image

Encapsula una imagen, extendiendo Binary. Si el tamaño de la imagen es mayor que el límite max_width/max_height de píxeles, la imagen se redimensionará hasta el límite manteniendo la relación de aspecto.

image_128 = fields.Image("Logo", max_width=128, max_height=128)

Monetary

Encapsula un flotante expresado en una res_currency dada. La precisión decimal y el símbolo de moneda se toman del atributo currency_field.

currency_id = fields.Many2one('res.currency', string='Currency') 
amount = fields.Monetary(currency_field='currency_id')

Selection

Tipo de campo que almacena un texto en la base de datos, que permite al usuario hacer una selección entre varios valores predefinidos. La selección se puede establecer como una lista de tuplas o una llamada que devuelva una lista de tuplas.

selection_field = fields.Selection([('a', 'A')])
selection_field = fields.Selection(selection=[('a', 'A')])
selection_field = fields.Selection(selection='a_function_name')

Opciones especificas:

  • Selection: lista de tuplas o una función que retorna una lista de tuplas.
  • Size: la opción size=1 es obligatoria cuando se está usando indices que son enteros y no cadenas.

Text

Tipo de campo usado para almacenar textos largos.

text_field = fields.Text()

HTML

Tipo de campo que almacena HTML.

html_field = fields.Html()

Reference

Tipo de campo que almacena una referencia arbitraria de un modelo y una fila.

refence_field = fields.Reference([('model_name', 'usantString')])
refence_field = fields.Reference(selection=[('model_name', 'String')])
refence_field = fields.Reference(selection='a_function_name')

Opciones especificas:

  • selection: Una lista de tuplas o llamada que coge un grupo de registros como entrada.

Many2oneReference

A diferencia de los campos referencia, el modelo debe especificarse en un campo Char, cuyo nombre debe especificarse en el atributo model_field para el campo Many2oneReference actual.

model = fields.Char('Related Document Model')
res_id = fields.Many2oneReference('Related Document ID', model_field='model')

Campos calculados

Los campos se pueden calcular (en lugar de leer directamente desde la base de datos) utilizando el parámetro de cálculo. Debe asignar el valor calculado al campo. Si usa los valores de otros campos, debe especificar esos campos usando depends().

from odoo import api
total = fields.Float(compute='_compute_total')
@api.depends('value', 'tax')
def _compute_total(self):
for record in self:
record.total = record.value + record.value * record.tax

Campos relacionados

Simplemente establece el argumento del nombre relacionado con su modelo. El parámetro store nos permite almacenar el valor en la base de datos.

rel_field = fields.Char(string='Name', related='partner_id.name')
rel_field = fields.Char(string='Name', store=True, related='partner_id.name')

Campos relacionales

Many2one

Tipo de campo que almacena una relación de muchos a uno.

field_id = fields.Many2one('res.users') 
field_id = fields.Many2one(comodel_name='res.users')

comodel_name indica el nombre del model opuesto.

One2Many

Tipo de campo que almacena una relación de uno a muchos.

field_ids = fields.One2many('res.users', 'rel_id')
field_ids = fields.One2many(comodel_name='res.users', inverse_name='rel_id')

comodel_name indica el nombre del model opuesto y inverse_name la columna del modelo opuesto.

Many2many

Tipo de campo que almacena una relación de muchos a muchos. Crea una nueva tabla con las claves primarias de ambos.

field_ids = fields.Many2many('res.users')
field_ids = fields.Many2many(comodel_name='res.users',
                             relation='table_name',
                             column1='col_name',
                             column2='other_col_name')

comodel_name indica nombre del modelo opuesto, relation el nombre de la tabla relacionada, column1 es el nombre de la columna que proviene del identificador de la tabla de la izquierda de la relación y column2 el nombre de la columna que proviene del identificador de la tabla de la derecha de la relación.

Campos automáticos de registro de acceso

Estos campos (Model.create_date, Model.create_uid, Model.write_date y Model.write_uid) se configuran y actualizan automáticamente si _log_access está habilitado. Se puede deshabilitar para evitar crear o actualizar aquellos campos en tablas para los que no son útiles. De forma predeterminada, _log_access se establece en el mismo valor que _auto.

Model.create_date: almacena la fecha y hora de creación de un registro.

Model.create_uid: almacena quién creó el registro (relación Many2one a res.users).

Model.write_date: almacena la fecha y hora de última actualización de un registro.

Model.write_uid: almacena quién actualizó por última vez el registro (relación Many2one a res.users).

_log_access debe estar habilitado en TransientModel.



en Blog
Cierre contable en Odoo – Reenumeración de asientos