Tipus de camp a Odoo 16

En aquesta entrada de blog explicarem les característiques els diferents tipus de camp permesos a Odoo 16.

Els tipus de camp en Odoo 16 es poden agrupar en tres categories:

  • Camps bàsics: booleà, cadena de caràcters, enter i punt flotant.
  • Camps avançats: data, binari, imatge, monetari, selecció, text, HTML, camps pseudo-relacionals, camps calculats, camps relacionats.
  • Camps relacionals: Many2one, One2many y Many2many.
  • Campos automàtics de registre d'accés: Model.create_date, Model.create_uid, Model.write_date i Model.write_uid que es configuren i actualitzen automàticament si _log_access està habilitat. Es pot deshabilitar per a evitar crear o actualitzar aquells camps en taules per als quals no són útils.

Camps bàsics

Boolean

Aquest tipus de camp només admet dos possibles valors: veritable o fals.

boolean_field = fields.Boolean()

Char

Tipus de camp format per una cadena de longitud limitada, que es pot ajustar mitjançant paràmetres.

char_field = fields.Char()

Opcions específiques:

  • Size: Determina el nombre màxim de caràcters.
  • Translate: indica que el camp pot ser traduït

Enter

Tipus de camp que desa valors numèrics sencers. Si el valor no està establert, aquest retorna 0.

int_field = fields.Integer()

Float

Tipus de camp que emmagatzema valors decimals. Si el valor no està establert, es considera 0,0.

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

Digits permet fixar el número dígits. El paràmetre pot ser una tupla (dígits de la part sencera, dígits de la part decimal) o una crida que retorna una tupla.

Camps avançats

Date

Tipus de camp que permet emmagatzemar dates.

date_field = fields.Date()

Opcions específiques:

  • context_today: retorna la data del dia actual basada en la zona horària.
  • today: retorna la data actual en format cadena.
  • from_string: retorna el valor datetime.date() en tipus cadena.
  • to_string: retorna el valor de la funció datetime.date en format cadena.

Datetime

Tipus de camp que emmagatzema valors de tipus data i hora.

datetime_field = fields.Datetime()

Opcions específiques:

  • context_timestamp: retorna la data i hora actual amb el format de la zona horària.
  • Now: retorna la data i hora actual del sistema.
  • from_string: retorna el valor datetime.date() al tipus cadena.
  • To_string: retorna el valor de la funció datetime.date en format cadena.

Binari

Tipus de camp que emmagatzema valors codificats a base64.

binary_field = fields.Binary()

Image

Encapsula una imatge, estenent Binary. Si la grandària de la imatge és major que el límit max_width/max_height de píxels, la imatge es redimensiona fins al límit mantenint la relació d'aspecte.

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

Monetary

Encapsula un flotant expressat en una res_currency donada. La precisió decimal i el símbol de moneda es prenen de l'atribut currency_field.

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

Selecció

Tipus de camp que emmagatzema un text a la base de dades, que permet a l'usuari fer una selecció entre diversos valors predefinits. La selecció es pot establir com una llista de tuples o una crida que torni una llista de tuples.

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

Opcions específiques:

  • Selecció: llista de tuples o una funció que retorna una llista de tuples.
  • Size: l'opció size=1 és obligatòria quan s'està fent servir índexs que són sencers i no cadenes.

Text

Tipus de camp utilitzat per emmagatzemar textos llargs.

text_field = fields.Text()

HTML

Tipus de camp que emmagatzema HTML.

html_field = fields.Html()

Reference

Tipus de camp que emmagatzema una referència arbitrària d'un model i fila.

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

Opcions específiques:

  • selection: Una llista de tuples o trucades que agafa un grup de registres com a entrada.

Many2oneReference

A diferència dels camps reference, el model ha d'especificar-se en un camp Char, el nom del qual ha d'especificar-se en l'atribut model_field per al camp Many2oneReference actual.

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

Camps calculats

Els camps es poden calcular (en lloc de llegir directament des de la base de dades) utilitzant el paràmetre de càlcul. Ha d'assignar el valor calculat al camp. Si usa els valors d'altres camps, ha d'especificar aquests camps usant 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

Camps relacionats

Simplement estableix l'argument del nom relacionat amb el seu model. El paràmetre store ens permet emmagatzemar el valor a la base de dades.

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

Tipus de camp que emmagatzema una relació de molts a un.

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

comodel_name indica el nom del model oposat.

One2Many

Tipus de camp que emmagatzema una relació d'un a molts.

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

comodel_name indica el nom del model oposat i inverse_name la columna del model oposat.

Many2many

Tipus de camp que emmagatzema una relació de molts a molts. Crea una taula amb les claus primàries dels dos registres relacionats.

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 nom del model oposat, relation el nom de la taula relacionada, column1 és el nom de la columna que prové de l'identificador de la taula de l'esquerra de la relació i column2 el nom de la columna que prové de l'identificador de la taula de la dreta de la relació.

Camps automàtics de registre d'accés

Aquests camps (Model.create_date, Model.create_uid, Model.write_date y Model.write_uid) es configuren i actualitzen automàticament si _log_access està habilitat. Es pot deshabilitar per a evitar crear o actualitzar aquells camps en taules per als quals no són útils. De forma predeterminada, _log_access s'estableix amb el mateix valor que _auto.

Model.create_date: emmagatzema la data i hora de creació d'un registre.

Model.create_uid: emmagatzema qui va crear el registre (relació Many2one a res.users).

Model.write_date: emmagatzema la data i hora d'última actualització d'un registre.

Model.write_uid: emmagatzema qui va actualitzar per última vegada el registre (relació Many2one a res.users).

_log_access ha d'estar habilitat a TransientModel.



en Blog
Tancament comptable a Odoo – Reenumeració d'assentaments