Saltar la navegación

Campos calculados y valores por defecto

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.

Alexandre Ibáñez López. Campos calculados y valores por defecto (CC BY-NC-SA)

Para saber más

Los campos calculados y decoradores nos van a permitir añadir funcionalidad a nuestro módulo de una forma sencilla. En los primeros pasos desarrollando módulos, verás que es muy fácil añadir campos básicos y sus valores por defecto pero enseguida te encontrarás que hay valores o comportamientos que se deben modificar para que el módulo realice la función que pretendes. Muchos de esos casos los podrás resolver mediante campos calculados o decoradores.

En la documentación oficial encontrarás referencias y ejemplos de ambas situaciones:  campos calculados y decoradores.

Tarea

Duración:
00:30
Agrupamiento:
1

En esta ocasión vamos a establecer que las citas tengan un coste dependiendo de la hora a la que se soliciten. Para ello, vamos a añadir un nuevo campo precio al modelo citas. Dicho campo será un campo calculado a través de una función en el que establecerá el precio. Si la cita es de 9 a 10:30, el precio será de 3€ y si es de 11 a 13h, el precio será de 5€.

De igual modo, vamos a modificar el campo fecha para que el valor por defecto de dicho campo, sea la el día actual.

Creado con eXeLearning (Ventana nueva)