Odoo: Decoradores

@api.constrains()

@api.constrains('param1')
def _notAllowed(self):
  if self.param1 = 0 :
    raise ValidationError("Zero is Not allowed")

@api.autovacuum()

El método se ejecutará cada 24 horas.

@api.onchange()

Solo aplica para los formularios (vistas), su función es monitorear si un valor en el formulario cambia en caso que si, pueden desenlazarse las acciones deseadas.

# car.py
===============
@api.onchange('car_verified')
def _ready_to_trip(self):
    if self.car_verified:
       self.ready_to_trip = True
    else:
       self.ready_to_trip = False 

@api.depends()

Al igual que @api.onchange, monitorea cambios en formularios (vistas), pero además es capaz monitorear cambios a nivel de backend, una peculiaridad es que puede trabajar con campos de modelos relacionados, es decir, que se disparará la función si algo cambia en el padre, por ejemplo.

# car.py
===============
# Cuando cambie el campo 'car_verified' o el campo email en la tabla res_users
# se disparará el siguiente código.
@api.depends('car_verified','res_users.email')
def _ready_to_trip(self):
    if self.car_verified:
       self.ready_to_trip = True
    else:
       self.ready_to_trip = False 

@api.depends_context()

abc

@api.model_create_multi()

Permite crear múltiples registros en un modelo (por default solo permite uno a la vez), es decir, con esta anotación se prepara al modelo para que soporte la creación de múltiples registros.

# car.py
===============
@api.model_create_multi
# Se sobreescribe el método create, es decir, 
# el siguiente código reemplaza al del ORM
def create(self, vals_list):
   records = super(Car, self).create(vals_list)
   return records

def create_cars(self):
   car1 = {'model':'1AB', 'color': 'Red'}
   car2 = {'model':'i84', 'color': 'Blue'}
   self.env['odoo_db.car'].create([car1,car2])

# car.xml
===============
<button name="create_cars" string="CrearMulti" type="object" class="eo_highlight">

@api.returns()

abc

@api.model()

Sirve para migrar versiones antiguas a versiones modernas.

@api.one()

Obsoleta.

@api.multi()

Obsoleta.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *