[pyar] [django] Mejor forma de renderear distintos tipos un Modelo.

Julo Waks ifjulo en gmail.com
Mie Sep 17 11:47:35 ART 2014


Buen día lista!
Despues de mucho lidiar con este problema decidí compartirlo con mentes
frescas para conseguir una nueva perspectiva.

Situación:
En el proyecto tenemos un modelo que es Promo, que a su vez tiene distintos
tipos de promos (modelos con FK a Promo) y esos tipos de promo son
distintos y son los que definen como que cosas deberían ser mostradas.
Actualenmente, cuando el usuario accede a /promo/1/,  lo que hacemos es if
anidados preguntando por el tipo de promo y seteando en ese momento el
template_name y un o_promo(modelo del tipo de promocion)
Evidentemente este diseño no es muy escalable porque si algun día hay 10
tipos de promos, tener 10 if's anidados no es lo más pythonico.
La solución que encontre es definir en el modelo de Promo un metodo que sea
get_promo_handler() y devuelva una clase de acuerdo al tipo de promo que es
y que esa promo tenga metodos como render() ó  otros metodos necesaarios
para la logica del proyecto (generar cupones, saber si la promoción esta
finalizada, etc.)

El codigo de ejemplo esta aca [0]

Al ser nuevo en python se me abren un monton de dudas.

1. Es la mejor solución para esto? Que otras formas existen?
2. Lo estoy implementando de la mejor manera?
3. Estoy usando de manera apropiada ABCMeta[1]? debería usar quizas algo
como __new__[2]?
4. No termino de entender que es el ducktyping[3] y como afecta en todo
esto.

Muchas gracias de antemano,
Saludos,
Julo


[0] http://linkode.org/p39S0VryugbTFPXXhkVb94
[1] https://docs.python.org/2/library/abc.html
[2] https://docs.python.org/2/reference/datamodel.html#object.__new__
[3] https://docs.python.org/2/glossary.html#term-duck-typing

pongo todos los links porque son los que use para intentar entender los
componentes.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140917/ae2c92b6/attachment-0001.html>


More information about the pyar mailing list