Найти - Пользователи
Полная версия: __unicode__ для parent table при multi-table inheritance
Начало » Django » __unicode__ для parent table при multi-table inheritance
1
Vasilych
Ситуация следующая. Есть три модели:

class Party(models.Model):
address = models.TextField()


class Company(Party):
name = models.CharField(max_length=100)

def __unicode__(self):
return self.name


class Person(Party):
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
company = models.ForeignKey(Company, null=True, blank=True)

def __unicode__(self):
return "%s %s" % (self.lname, self.fname)
Нужно для модели Party определить метод __unicode__ , чтобы он отображал __unicode__ методы child классов.
В голову приходит следующая мысль

    def __unicode__(self):
try:
return self.company.__unicode__()
except:
return self.person.__unicode__()
Но это как то по дурацки :) Как можно сделать иначе?
Vasilych
Вот думаю, будет лучше.
Нужно добавить поле party_type, а в потомках переопределить метод save() чтобы сохранялся необходимый нам party_type.
Тогда __unicode__ становится логичнее.

class Party(models.Model):
address = models.TextField()
party_type = models.CharField(max_length='20')

def __unicode__(self):
if self.party_type == 'company':
return self.company.__unicode__()
elif self.party_type == 'person':
return self.person.__unicode__()

class Company(Party):
name = models.CharField(max_length=100)

def __unicode__(self):
return self.name

def save(self):
self.party_type = 'company'
super(Company, self).save()

class Person(Party):
fname = models.CharField(max_length=100)
lname = models.CharField(max_length=100)
company = models.ForeignKey(Company, null=True, blank=True)

def __unicode__(self):
return "%s %s" % (self.lname, self.fname)

def save(self):
self.party_type = 'person'
super(Person, self).save()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB