[pyar] Django, Model Inheritance en la práctica

Nhomar Hernández nhomar.hernandez en netquatro.com
Lun Ago 2 18:17:58 ART 2010


No se en Django, pero en OpenObject (que se parece) usamos algo llamado
"contexto" con definirlo en la llamada como un dict....
Creo que Django debe tener un concepto parecido.

o sea cuando llamas el método le pasas por "context" un diccionario....

Espero te sirva!

El 2 de agosto de 2010 16:25, Federico Heinz <fheinz en vialibre.org.ar>escribió:

> Estuve viendo que Django soporta herencia en los Models, lo que me
> viene espectacular para una app que estoy haciendo como ejercicio:
> un sistema para hacer débitos automáticos. La herencia de modelos
> viene muy bien porque permite hacer cosas como esta:
>
> class PaymentMethod(models.Model):
>        customer = models.ForeignKey(Customer)
>        [...]
>
> class CBUDebit(PaymentMethod):
>        bank = models.ForeignKey(Bank)
>        cbu = models.CharField(max_length=21)
>        [...]
>
> class CCDebit(PaymentMethod):
>        cc_operator = models.ForeignKey(CrediCard)
>        cc_number = models.CharField(max_length=16)
>        expiration_date = models.CharField(max_length=6)
>        [...]
>
> class Sale(models.Model):
>        customer = ForeignKey(Customer)
>        payment_method = ForeignKey(PaymentMethod)
>        [...]
>
> Lo bueno es que puedo armar las cosas de modo que se puedan ingresar
> todos los medios del pago del usuario, y si `c` es una instancia de
> Customer, entonces con `c.payment_method_set.all()` puedo obtener
> todos los métodos de pago de un cliente.
>
> Lo que no termino de enganchar es: yo podría hacer algo estilo:
>
>        sale = Sale()
>        sale.payment_method = c.payment_method_set.all()[0]
>
> y con eso tengo armada la cosa para cobrarlo... en principio. Porque
> ahora `sale.payment_method` es una instancia de `PaymentMethod`, no
> de la clase "que corresponde". Si sé que se trata de una tarjeta de
> crédito, puedo acceder al objeto "completo" con
> `sale.payment_method.ccdebit`, pero en realidad, si sólo tengo
> `sale.payment_method` *no sé* si es `CBUDebit` o `CCDebit`, y no
> encuentro ninguna manera sencilla de determinarlo.
>
> Se me ocurren algunas maneras medio estrambóticas de resolverlo,
> almacenando en las instancias de `PaymentMethod` algún distintivo de
> la subclase, por ejemplo el nombre del atributo que lleva a la otra
> tabla, cosa de usarlo en con `getattr()`, pero pensé que en una de
> esas ya alguien tropezó con este use case y tiene una solución que
> es el aujero'el mate...
>
>        Fede
> _______________________________________________
> 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/
>



--
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20100802/8956e9ad/attachment.html>


More information about the pyar mailing list