[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