[pyar] Campo Primario Web2py

Roberto Perdomo robertop23 en gmail.com
Vie Feb 4 16:55:28 ART 2011


a mi me quedó asi definitivamente y funciona al 100% con Postgres:

db.tipo_nomina.nomina.requires= [IS_NOT_EMPTY(error_message='Ha
introducido un valor vacío'),
                                 IS_NOT_IN_DB(db, 'tipo_nomina.nomina',
                                              error_message = 'Este
registro ya se encuentra procesado'),
                                 IS_LENGTH(maxsize=40, minsize=5,
error_message='Introduzca entre %(min)g y %(max)g caracteres')
                                 ]

El 04/02/11, Mariano Reingart <reingart en gmail.com> escribió:
> Cuando son varios validadores, van en una lista:
>
> db.nadadores.fecnac.requires = [ IS_DATE(error_message='Formato
> erroneo? (AAA-MM-DD)'),
>
> IS_NOT_EMPTY(error_message='Campo Obligatorio'), ]
>
> Sds
>
> Mariano Reingart
> http://www.sistemasagiles.com.ar
> http://reingart.blogspot.com
>
>
>
> 2011/2/4 nicolás rosbaco <antiyanki en gmail.com>:
>> Hola, lo probé y me pasa esto:
>>
>> 2011/2/3 Roberto Perdomo <robertop23 en gmail.com>
>>>
>>> 2011/2/3 nicolás rosbaco <antiyanki en gmail.com>
>>>>
>>>> OK. entonces: unique, evita la inserción de tuplas en las tablas (si la
>>>> clave esta repetida)... y pasa por cuenta del programador evitar que
>>>> ello
>>>> ocurra (o atrapar la excepción supongo yo)
>>>>
>>>> con IS_NOT_IN_DB las verificaciones se hacen antes de modificar la
>>>> tabla... pero la tabla no es creada con la restricción referida ¿está
>>>> bien?
>>>>
>>>> Por otro lado: como hago (cuando creo la tabla) si quiero incluir más de
>>>> un requires???
>>>
>>> Si necesitas mas de uno lo haces asi:
>>>
>>> db.define_table('tipo_nomina'
>>> ,
>>>       SQLField('nomina', type='string', length=40, notnull=False,
>>> unique=True, required=True))
>>>
>>>
>>>
>>> db.tipo_nomina.nomina.requires= IS_IN_DB(db, db.tipo_nomina.nomina,
>>> error_message='Ha introducido un valor vacío o registrado')
>>>
>>>
>>> db.tipo_nomina.nomina.requires = IS_LENGTH(maxsize=40, minsize=5,
>>> error_message='Introduzca entre %(min)g y %(max)g caracteres')
>>>
>>
>> Yo tengo las siguientes condiciones:
>> db.nadadores.fecnac.requires = IS_DATE(error_message='Formato erroneo?
>> (AAA-MM-DD)')
>> db.nadadores.fecnac.requires = IS_NOT_EMPTY(error_message='Campo
>> Obligatorio')
>>
>> si ingreso en el campo fecha cualquier verdura la tupla se agrega (después
>> claro da error al intentar listar la tabla) a la tabla!
>>
>> Si dejo vacío el campo chilla el validador! por lo tanto: el último
>> requires
>> esta siendo considerado....
>>
>> Ahora (acá lo curioso) si borro el último requires y luego ingreso
>> cualquier
>> verdura en el campo fecha chilla!...
>>
>> Me da a pensar que un requires anula el anterior.... ¿puede ser?
>>
>>>
>>> db.tipo_nomina.nomina.requires =
>>> IS_MATCH('^[a-zA-ZáéíóúÁÉÍÓÚ\s]+$',error_message='Introduzca solo
>>> letras')
>>>>
>>>> Bueno gente, esto esta re bueno. Muchas gracias
>>>>
>>>>
>>>> El 3 de febrero de 2011 19:49, Mariano Reingart <reingart en gmail.com>
>>>> escribió:
>>>>>
>>>>> Las restricciones primarykey, unique y notnull  se aplican a nivel de
>>>>> datos, web2py no las verifica, simplemente crea las tablas con esas
>>>>> condiciones, y el servidor de base de datos debería hacer el resto
>>>>> (por lo que los conectores lanzan excepciones).
>>>>>
>>>>> Los validadores (IS_NOT_IN_DB, IS_IN_DB, IS_NOT_EMPTY) funcionan a
>>>>> nivel de los controladores/vistas, son verificados antes de modificar
>>>>> la base de datos, cuando el usuario utiliza un formulario (y muestran
>>>>> un mensaje de error en la pantalla, con la posibilidad de corregir el
>>>>> formulario).
>>>>>
>>>>> En el libro está explicado en detalle:
>>>>>
>>>>>
>>>>> http://www.latinuxpress.com/books/drafts/web2py/caps/cap6.html#representacion-de-registros
>>>>>
>>>>> En este caso, con IS_NOT_IN_DB no aceptaría el formulario mostrando un
>>>>> error al usuario si esta duplicado algún valor.
>>>>>
>>>>> Sds
>>>>>
>>>>> Mariano Reingart
>>>>> http://www.sistemasagiles.com.ar
>>>>> http://reingart.blogspot.com
>>>>>
>>>>> 2011/2/3 nicolás rosbaco <antiyanki en gmail.com>:
>>>>> > me faltó decir que estoy trabajando con web2py
>>>>> >
>>>>> > El 3 de febrero de 2011 19:30, nicolás rosbaco <antiyanki en gmail.com>
>>>>> > escribió:
>>>>> >>
>>>>> >> Hola, mira no tengo la solución... pero si me paso algo parecido y
>>>>> >> de
>>>>> >> pronto por acá puedo llegar a saber que pasa.
>>>>> >>
>>>>> >> En mi caso el unique tampoco anduvo (¿ignoro por que??) pero utilicé
>>>>> >> lo
>>>>> >> siguiente:
>>>>> >>
>>>>> >> db.nadadores.email.requires = IS_NOT_IN_DB(db, 'nadadores.email',
>>>>> >> error_message='Dirección de mail duplicada. Ya existe un usuario
>>>>> >> registrado
>>>>> >> con esta dirección de mail')
>>>>> >>
>>>>> >> La verdad que me gustaría saber para que sirve el unique, ya que
>>>>> >> suponía
>>>>> >> lo mismo que vos
>>>>> >>
>>>>> >>
>>>>> >> 2011/2/3 Roberto Perdomo <robertop23 en gmail.com>
>>>>> >>>
>>>>> >>> Buenas tardes,
>>>>> >>>
>>>>> >>> Alguien de casualidad tiene conocimiento en cuanto a como definir
>>>>> >>> un
>>>>> >>> campo primario adicional en una tabla.
>>>>> >>>
>>>>> >>> Tengo por ejemplo una tabla:
>>>>> >>>
>>>>> >>> db.define_table('tipo_nomina',
>>>>> >>>       SQLField('nomina', type='string', length=40, notnull=True,
>>>>> >>> required=True, unique=True)
>>>>> >>>       )
>>>>> >>>
>>>>> >>> Donde unique=True supuestamente debería funcionar y hacer que no se
>>>>> >>> permitan valores repetidos para el campo nomina, pero, al añadir un
>>>>> >>> valor
>>>>> >>> repetido resulta el siguiente error:
>>>>> >>>
>>>>> >>>
>>>>> >>> IntegrityError: duplicate key value violates unique constraint
>>>>> >>> "tipo_nomina_nomina_key"
>>>>> >>>
>>>>> >>> Investigue un poco y dicen que es un error de la Base de Datos, en
>>>>> >>> mi
>>>>> >>> caso es Postgres. Entonces Web2py no es capaz de manejar o mejor
>>>>> >>> dicho,
>>>>> >>> generar un error para cuando se esta insertando un valor repetido
>>>>> >>> en
>>>>> >>> un
>>>>> >>> campo?
>>>>> >>>
>>>>> >>> Intente con primarykey = ['nomina'], pero fue infructuoso.
>>>>> >>>
>>>>> >>> lo que quisiera seria realmente poder definir un campo primario
>>>>> >>> para
>>>>> >>> evitar valores repetidos, pero no encuentro la manera adecuada para
>>>>> >>> ello.
>>>>> >>>
>>>>> >>> PD: los formularios son generado utilizando SQLFORM y CRUD
>>>>> >>>
>>>>> >>> Gracias de antemano
>>>>> >>>
>>>>> >>>
>>>>> >>>
>>>>> >>>
>>>>> >>> _______________________________________________
>>>>> >>> pyar mailing list pyar en python.org.ar
>>>>> >>> http://listas.python.org.ar/listinfo/pyar
>>>>> >>>
>>>>> >>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> --
>>>>> >> "En un país colonial las oligarquías son las dueñas de los
>>>>> >> diccionarios"
>>>>> >> (John William Cooke)
>>>>> >
>>>>> >
>>>>> >
>>>>> > --
>>>>> > "En un país colonial las oligarquías son las dueñas de los
>>>>> > diccionarios"
>>>>> > (John William Cooke)
>>>>> >
>>>>> > _______________________________________________
>>>>> > pyar mailing list pyar en python.org.ar
>>>>> > http://listas.python.org.ar/listinfo/pyar
>>>>> >
>>>>> > PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>> >
>>>>> _______________________________________________
>>>>> pyar mailing list pyar en python.org.ar
>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>
>>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>>
>>>>
>>>>
>>>> --
>>>> "En un país colonial las oligarquías son las dueñas de los diccionarios"
>>>> (John William Cooke)
>>>>
>>>> _______________________________________________
>>>> pyar mailing list pyar en python.org.ar
>>>> http://listas.python.org.ar/listinfo/pyar
>>>>
>>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>>
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>>
>>
>> --
>> "En un país colonial las oligarquías son las dueñas de los diccionarios"
>> (John William Cooke)
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>



More information about the pyar mailing list