13. Desarrollando con Odoo (8). Restricciones de campos y de BD. La funcion subrayado "_"
1. Restriciones de formato de campo(en el modelo)
Para generar restricciones se utiliza el decorador @api.constrains('campo') que se aplica sobre la función que valida dicho campo.
Es bastante útil utilizar regex. Para ello hay que hacer:
import re
Veamos nuestro ejemplo concreto
regex = re.compile('^[0-9]{8}[a-z]', re.I)
Siendo:
- '^' indica que comienza por lo que viene
- [0-9] indica que el siguiente caràcter es un dígito
- {8} indica que la condición anterior se repite 8 veces (o sea admite solo 8 dígitos)
- [a-z] indica una letra en minúscula
- re.I indica que ignore el caso (admite tanto mayúsculas como minúsculas)
O sea quiere que haya 8 dígitos y despues letras ya sean mayúsculas o minúsculas
Veamos pues el modelo
access_code = fields.Char() @api.constrains('access_code') def _check_access_code(self): regex = re.compile('^[0-9]{8}[a-z]', re.I) for record in self: if len(record.access_code) <10: raise ValidationError ('Longitud código de acceso incorrecta') elif not regex.match(record.access_code): raise ValidationError (_('Formato código de acceso incorrecto')) else: _logger.info ('Código de acceso generado correctamente')
Obvservar la función subrayado "_" dentro del ValidationError. En cierta manera se utiliza para internacionalizar (i18n) los mensajes.
2. Restriciones de BD (en el modelo)
Las restricciones de BD se incluyen en el modelo y se realizan sobre la variable _sql_constraints que es una lista de tuplas (las listas son modificables pero las tuplas no)
El formato de la tupla que contiene 3 campos es:
- Nombre que aplicamos nosotros a la restricción
- Definición normalizada de la restricción
- Mensaje de error si no se verifica
En este caso vamos a crear una restricción que quiere que el valor del campo access_code sea único
# nombre_restricción restricción Mensaje si no se cumple _sql_constraints = [('access_code_unique', 'unique(access_code)', 'Access Code ya existe.')]
Comentarios
Publicar un comentario