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.