Ayuda con la herencia de modelos

339 views
Skip to first unread message

Felix

unread,
May 6, 2009, 2:23:55 PM5/6/09
to Django-es
Hola, estoy aprendiendo Django al tiempo que hago una aplicación para
una agencia de viajes.
Tengo estas definiciones de Lugares:

Una clase abstracta llamada Place que guarda información genérica
sobre los lugares

class Place(models.Model):
currency = models.CharField(_('currency'), max_length=128,
blank=True, null=True)
language = models.CharField(_('official language'),
max_length=128, blank=True, null=True)
class Meta:
abstract = True
Y varias clases derivadas Country(Pais), Region, City...

class Country(Place):
country = models.CharField(_('country'), max_length = 100)
continent = models.CharField(_('continent'),
choices=CONTINENT_CHOICES, max_length = 2, blank = True, null=True)
president = models.CharField(_('president'), max_length = 100,
blank = True, null=True)

En el Admin de Country puedo editar todos los campos de la clase
lugar, ya que se hereda de esta.

class City(Place):
city = models.CharField(_('city'), max_length=100)
country = models.ForeignKey(Country)
citylanguage = models.CharField(_('city slang'), default = ?
Country? )

Y me gustaría que citylanguage tuviera por defecto el mismo lenguage
que su pais.
Hay manera de hacerlo?

PD. He usado citylanguage en vez de language porque me da un error si
uso el mismo nombre que en Place... Como lo sobrescribiría si fuera
posible?

Aquí he pegado el código completo por si alguien esta interesado
http://dpaste.com/41496/

Facundo Casco

unread,
May 6, 2009, 5:56:11 PM5/6/09
to djan...@googlegroups.com
2009/5/6 Felix <vitra...@googlemail.com>:

> class City(Place):
>    city = models.CharField(_('city'), max_length=100)
>    country = models.ForeignKey(Country)
>    citylanguage = models.CharField(_('city slang'), default = ?
> Country? )
>
> Y me gustaría que citylanguage tuviera por defecto el mismo lenguage
> que su pais.
> Hay manera de hacerlo?
>
> PD. He usado citylanguage en vez de language porque me da un error si
> uso el mismo nombre que en Place... Como lo sobrescribiría si fuera
> posible?
>
Yo inentaria cambiar el metodo que se usa para crear una Ciudad nueva
y hacer que ahi busque el idioma del pais pero no estoy seguro de cual
es el metodo que tendrias que cambiar. Puede ser que tengas que usar
un custom manager.

Erny

unread,
May 18, 2009, 1:38:18 PM5/18/09
to djan...@googlegroups.com
Yo creo que lo puedes hacer muy fácil:


class City(Place):
   city = models.CharField(_('city'), max_length=100)
   country = models.ForeignKey(Country)
   citylanguage = models.CharField(_('city slang'))

   def save(self, commit=True):
      self.citylanguage = self.country.language
      super(City, self).save(commit=commit)

De todos modos, no sé por qué creas un nuevo atributo citylanguage. Si city deriva de Place, y Place ya tiene language, City tendrá ambos atributos, language y citylanguage. A lo mejor, city no debería heredar de Place?


Erny
Reply all
Reply to author
Forward
0 new messages