localflavor en newform-admin

25 views
Skip to first unread message

Martín Gaitán

unread,
Aug 23, 2008, 4:55:44 PM8/23/08
to djan...@googlegroups.com
hola gente. estoy intentando usar localflavor para validar un cuit/cuil (contrib que hizo el compañero de pyar Ramiro Morales [1])
La cuestion es que necesito usar esta validacion dentro de newform-admin (a esta altura, admin, a secas).

como hago?

en concreto tengo el modelito


class Proveedor(models.Model):
    """Datos de los proveedores del banco de sangre """
    nombre = models.CharField(max_length=70)
    [...]
    cuit = models.CharField(max_length=13, verbose_name=u'cuit/cuil', help_text="Ej: 23-10207218-9")


y necesito aplicar

http://www.djangoproject.com/documentation/localflavor/
tipo cuit (en este caso ARCUITField al form de admin para ese modelo )

alguien me da una manito?

abrazo


[1] http://mx.grulic.org.ar/lurker/message/20070830.190420.cc6f9c1b.fr.html


--
nqnwebs.com
textosypretextos.com.ar

Ramiro Morales

unread,
Aug 23, 2008, 8:10:58 PM8/23/08
to djan...@googlegroups.com
2008/8/23 Martín Gaitán <gai...@gmail.com>:

> hola gente. estoy intentando usar localflavor para validar un cuit/cuil
> (contrib que hizo el compañero de pyar Ramiro Morales [1])
> La cuestion es que necesito usar esta validacion dentro de newform-admin (a
> esta altura, admin, a secas).
>
> como hago?
>
> en concreto tengo el modelito
>
>
> class Proveedor(models.Model):
> """Datos de los proveedores del banco de sangre """
> nombre = models.CharField(max_length=70)
> [...]
> cuit = models.CharField(max_length=13, verbose_name=u'cuit/cuil',
> help_text="Ej: 23-10207218-9")
>
>
> y necesito aplicar
>
> http://www.djangoproject.com/documentation/localflavor/
> tipo cuit (en este caso ARCUITField al form de admin para ese modelo )
>

Martín,

Muy interesante la pregunta.

Por lo que puedo ver la mano viene por poder extender la admin app
para que use los form fields de localflavor a la hora de renderizar la change
view y la create view de tu modelo.

Revisando el código, este metodo de la clase BaseModelAdmin
(de la cual desciende ModelAdmin, ModelAdmin es la clase con
la que definís que que´res una interfaz en la app admin para tu modelo,
con sus respectivas opciones):

def formfield_for_dbfield(self, db_field, **kwargs):
"""
Hook for specifying the form Field instance for a given database Field
instance.

If kwargs are given, they're passed to the form Field's constructor.
"""

Ya el hecho de que la docstring hablde de "hook" da cierta esperanza
de que es algo 'implementable' :-D

Espero que te sirva. |Contanos como te fué!

Atentamente,

--
Ramiro Morales

Ramiro Morales

unread,
Aug 23, 2008, 8:44:47 PM8/23/08
to djan...@googlegroups.com
2008/8/23 Ramiro Morales <cra...@gmail.com>:

>
> Muy interesante la pregunta.
>
> Por lo que puedo ver la mano viene por poder extender la admin app
> para que use los form fields de localflavor a la hora de renderizar la change
> view y la create view de tu modelo.
>
> Revisando el código, este metodo de la clase BaseModelAdmin
> (de la cual desciende ModelAdmin, ModelAdmin es la clase con
> la que definís que que´res una interfaz en la app admin para tu modelo,
> con sus respectivas opciones):
>
> def formfield_for_dbfield(self, db_field, **kwargs):
> """
> Hook for specifying the form Field instance for a given database Field
> instance.
>
> If kwargs are given, they're passed to the form Field's constructor.
> """
>
> Ya el hecho de que la docstring hablde de "hook" da cierta esperanza
> de que es algo 'implementable' :-D
>

No me aguanté la intriga:

http://dpaste.com/hold/73459/

Logicamente es muy posible que la condición del if en la línea 16
(linea 8 de admin.py) tengas que hacerla un poco más específica
(posiblemente basado adicionalmente en algúna otra característica del campo
CharField 'cuil' del modelo como su nombre, etc.) y no solo
con un isinstance(models.CharrField) para que no te aplique un campo de
formulario ARCUITField a *todos* los CharField de tu modelo Proveedor
(Prueba en mi ejemplo).

Este es el tipo de cosas que postearía en mi blog si tuviese uno:-)

Suerte,

--
Ramiro Morales

Ramiro Morales

unread,
Aug 23, 2008, 10:07:03 PM8/23/08
to djan...@googlegroups.com
2008/8/23 Ramiro Morales <cra...@gmail.com>:

>
> No me aguanté la intriga:
>
> http://dpaste.com/hold/73459/
>
> Logicamente es muy posible que la condición del if en la línea 16
> (linea 8 de admin.py) tengas que hacerla un poco más específica
> (posiblemente basado adicionalmente en algúna otra característica del campo
> CharField 'cuil' del modelo como su nombre, etc.) y no solo
> con un isinstance(models.CharrField) para que no te aplique un campo de
> formulario ARCUITField a *todos* los CharField de tu modelo Proveedor
> (Prueba en mi ejemplo).
>

http://dpaste.com/hold/73468/

Me faltaba delegar en la clase padre para los casos de los
campos que no nos interesa tocar (línea 20). Sin eso, el formulario
se rompe, por ejemplo: sólo muestra el campo que estamos tocando
(cuit).

HTH

--
Ramiro Morales

PD: Definitivamente la ducha es uno de los mejores lugares para
redondear ideas, pensar en nuevas alternativas o (como
es el caso) darse cuenta de omisiones :)

Martín Gaitán

unread,
Aug 24, 2008, 11:57:25 PM8/24/08
to djan...@googlegroups.com
Bueno compañero, muchisimas gracias por la respuesta. Lo estamos implementando en nuestro proyectito.
Seria interesantísimo un blog con este tipo de aportes, y seguro merecería estar en mis feeds, asi que avise en cuanto se decida a tener uno. Mientras tanto, haga su aporte a http://www.djangosnippets.org/ para el provecho de toda la comunidad.

abrazo
Martin



2008/8/23 Ramiro Morales <cra...@gmail.com>
Reply all
Reply to author
Forward
0 new messages