[pyar] [Django] Herencia en modelos y consultas sobre el modelo

Santiago Basulto santiago.basulto en gmail.com
Jue Nov 1 18:10:38 ART 2012


Esto es un problema muy común en Orientación a Objetos. Yo soy nuevo en
Python, pero lo he visto en lenguajes similares. El problema es que Python
usa lo que se conoce como Duck Typing: "Si camina como un pato, nada como
un pato, y hace "cuak" como un pato, lo más probable es que sea un pato".

Es decir, no hay que calentarse por lo que realmente "es" el objeto sino
por las cosas que "puede hacer". Esto se confunde mucho con lenguajes que
se basan mucho en la identidad de los objetos. En Java por ejemplo eso es
muy común, el clásico "instanceof".

La diferencia de esto es que en vez de chequear un objeto por "lo que es",
deberías fijarte si "puede hacer" lo que vos querés. Un ejemplo, suponete
que te llegan una lista de animales y vos querés hacerlos nadar. Tenés dos
formas, la primera se fija si es un pato:

for a in animales:
    if isinstance(a, Pato):
        a.nadar()

la segunda no le importa qué es el objeto, sino que pueda nadar.

for a in animales:
    if hasattr(a, 'nadar'):
        a.nadar()

Volviendo a tu ejemplo, seguramente vos querrás hacer algo en particular
con esos hijos o hijas cuando haces el queryset. Lo que tenés que fijarte
es que ese hijo o hija tenga el atributo/método que querés. No importa qué
es. Ahora bien, si en ese caso tenés problemas, efectivamente no estás
modelando de forma correcta el problema y lo mejor sea lo que dijo Roberto,
utilizar relaciones.

Espero sirva. Saludos!


2012/11/1 Roberto Bravo <xbx.roberto en gmail.com>

> 2012/11/1 Dario Ocles <dario.ocles en gmail.com>
>
>>
>> Mi ejemplo era de juguete y en el ejemplo un Padre puede tener varios
>> hijos pero mi modelo eso no es necesario y de hecho lo quiero evitar.
>> Ademas sigo con el mismo drama, cuando hago consultas sobre Padre me
>> sigue devolviendo objetos padres.
>>
>> Ok. Probaste hacer un custom manager?
> https://docs.djangoproject.com/en/dev/topics/db/managers/
>
> _______________________________________________
> 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/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>



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


More information about the pyar mailing list