Utilización de funciones y decoradores
Los campos calculados son aquellos cuyo valor se obtendrá tras haberse ejecutado una función que hayamos definido previamente. Para definir estos campos tendremos que especificarle al campo (field) el atributo compute y asignarle la función que queramos que ejecute.
total = fields.Float(compute = '_una_funcion')
Los campos que definamos de este tipo, aparecerán en la vista como readonly, ya que su valor no lo establece el usuario sino que es calculado automáticamente.
Es común utilizar este tipo de campos junto a decoradores. Mediante estos decoradores podremos definir cuando lanzar una determinada función. Por ejemplo, si quisiéramos que se calcule automáticamente el total cada vez que cambie el precio de un producto.
En este caso, previo a la función podríamos definir el decorador depends
@depends('precio')
def _una_funcion(self):
Existen muchos otros decoradores que podemos utilizar depends, api.model, api.constraints. Haciendo uso de ellos, conseguiremos comportamientos que necesitaremos en nuestro modelo añadiendo valores automáticos, restricciones, etc.
En el siguiente vídeo puedes ver cómo utilizar tanto campos calculados como decoradores.