--
Alvaro Lizama
http://alvarolizama.net
equipos.id | equipos.nombre | equipos.propietario | equipos.edicion | equipos.nombreclave |
---|---|---|---|---|
6 | Los Pehuenes | 3 | 1 | 1Los Pehuenes |
7 | Tiburones | 10 | 1 | 1Tiburones |
8 | Tiburones | 1 | 1 | 1Tiburones |
> hola, y desde ya gracias por la atención, te comento:
>
> intenté lo que me sugerís. tengo esto:
>
> db.define_table('equipos',
> Field('nombre', requires = [IS_NOT_EMPTY()], label = 'Nombre del
> equipo'),
> Field('propietario', 'reference auth_user', required=True),
> Field('edicion', 'reference ediciones', required=True),
> Field('nombreclave', unique=True, compute=lambda r:
> str(r['edicion'])+r['nombre']))
>
> resulta que puedo insertar sin problemas dos registros con la
> "combinación prohibida"
>
> equipos.id<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/select/db?orderby=equipos.id>
> equipos.nombre<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/select/db?orderby=equipos.nombre>
> equipos.propietario<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/select/db?orderby=equipos.propietario>
> equipos.edicion<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/select/db?orderby=equipos.edicion>
> equipos.nombreclave<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/select/db?orderby=equipos.nombreclave>
> 6
> <http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/update/db/equipos/6>Los
> Pehuenes3<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/update/db/auth_user/3>
> 1
> <http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/update/db/ediciones/1>1Los
> Pehuenes7<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/update/db/equipos/7>
> Tiburones10<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/update/db/auth_user/10>
> 1
> <http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/update/db/ediciones/1>
> 1Tiburones8<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/update/db/equipos/8>
> Tiburones1<http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/update/db/auth_user/1>
> 1
> <http://127.0.0.1:8000/desafio_curru_leuvu/appadmin/update/db/ediciones/1>
10 | Tiburones | 1 | 1 | 1Tiburones |
11 | Tiburones | 13 | 1 | 1Tiburones |
-Lo mas adecuado (aprovechando la flexibilidad del framework), seria
buscar un algoritmo capaz de generar claves combinadas y que a su vez
haga la verificacion correspondiente en la DB, de manera que si existe
una clave igual en lugar de devolver un mensaje de error prueba una
combinacion nueva hasta encontrar una que sea unica.
-Si bien este campo puede ser una clave primaria en potencia, seria
mala practica aplicarlo como tan, las claves primarias deben ser
enteras y consecutivas, por eso es que ese campo DAL lo gestiona de
manera automatica, de hecho es mala practica dejar que los usuarios
puedan manipular una clave primaria.
-Usando los parametros de validacion en la declaracion de campos que
provee DAL se puede obtener el comportamiento de cualquier campo como
una clave primaria sin que este sea tal y manteniendo el campo ID
intacto.
-Si bien los validadores son importantes, seria bueno volver al primer
punto, algoritmos que ahorren tiempo... algo que se me ocurre, puede
que suene tonto.. es: "tomar tres campos, establecer un limite de 10
caracteres para la clave generada y con un random del contenido de los
tres campos ir concanteando los caracteres hasta llegar a 10, en lo
posible que no se repitan..."
PS: por ahi a Nico esto lo confunde un poco, pero admiro mucho su
perseverancia y las ganas que le pone a lo que esta haciendo.
Algunas cuestiones sobre esto:
-Lo mas adecuado (aprovechando la flexibilidad del framework), seria
buscar un algoritmo capaz de generar claves combinadas y que a su vez
haga la verificacion correspondiente en la DB, de manera que si existe
una clave igual en lugar de devolver un mensaje de error prueba una
combinacion nueva hasta encontrar una que sea unica.
-Si bien este campo puede ser una clave primaria en potencia, seria
mala practica aplicarlo como tan, las claves primarias deben ser
enteras y consecutivas, por eso es que ese campo DAL lo gestiona de
manera automatica, de hecho es mala practica dejar que los usuarios
puedan manipular una clave primaria.
-Usando los parametros de validacion en la declaracion de campos que
provee DAL se puede obtener el comportamiento de cualquier campo como
una clave primaria sin que este sea tal y manteniendo el campo ID
intacto.
-Si bien los validadores son importantes, seria bueno volver al primer
punto, algoritmos que ahorren tiempo... algo que se me ocurre, puede
que suene tonto.. es: "tomar tres campos, establecer un limite de 10
caracteres para la clave generada y con un random del contenido de los
tres campos ir concanteando los caracteres hasta llegar a 10, en lo
posible que no se repitan..."
Estoy revisando el tema validadores y me equivoqué, no podés recuperar
un registro con una clase validador como se hace por ejemplo con
compute, porque lo que se valida es exclusivamente el valor del
formulario con los parámetros que le pases al constructor.
De todos modos, el método que te propuse al principio lo probé y