Форум сайта python.su
Ситуация следующая. Есть три модели:
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)
def __unicode__(self):
try:
return self.company.__unicode__()
except:
return self.person.__unicode__()
Офлайн
Вот думаю, будет лучше.
Нужно добавить поле 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()
Офлайн