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

Roberto Bravo xbx.roberto en gmail.com
Jue Nov 1 15:52:44 ART 2012


2012/11/1 Dario Ocles <dario.ocles en gmail.com>

> Buenas gente, tengo el siguiente problema.
>
> Tengo este modelo en Django:
>
>
> class Padre(models.Model):
>     nombre = models.TextField()
>
>  class Hijo(Padre):
>     edad = models.IntegerField()
>
> class Hija(Padre):
>     gustos = models.TextField()
>
>
> Y hago lo siguiente:
>
> >>> hijo = Hijo(nombre="dario", edad=20)
> >>> hijo.save()
> >>> hija = Hija(nombre="natalia", edad=20)
> >>> hija.save()
> >>> print Padre.objects.all()
> [<Padre: Padre object>, <Padre: Padre object>]
>
>
> Y yo lo que espero es:
>
> >>> print Padre.objects.all()
> [<Hijo: Hijo object>, <Hija: Hija object>]
>
>
> Entiendo que teniendo el objeto Padre puedo hacer:
>
> >>> p = Padre.objects.get(nombre='dario')
> >>> print p.hijo.edad
> 20
>
> El tema es que tengo que saber que es un Hijo o una Hija.
> Simplemente quiero que me devuelva los objetos correspondientes haciendo
> consultas sobre Padre.
>
> Se les ocurre una forma elegante de hacerlo? Ya existe algo que haga esto
> automaticamente?
>
> Saludo y gracias.
>
>
Tenés que usar relaciones en vez de herencia.
En tu caso, por ejemplo, una foreign key 'padre' en cada hijo/a.
https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey

Te recomiendo que revises los conceptos de OOP. Tratá de pensar la herencia
como "es un" (no siempre siempre se lo usa así, pero es otro tema).
si hacés class Hijo(Padre), sería incorrecto porque Hijo <no> "es un" Padre.

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


More information about the pyar mailing list