我的應用程序使用類繼承來儘量減少我的模型重複。我的models.py看起來有點像這樣:在Django的父級實例中找到一個子實例最簡單的方法是什麼?
class BaseModel(models.Model):
title = models.CharField(max_length=100)
pub_date = models.DateField()
class Child(BaseModel):
foo = models.CharField(max_length=20)
class SecondChild(BaseModel):
bar = models.CharField(max_length=20)
現在大部分的時間,我的意見和模板只處理與兒童或SecondChild的實例。然而,偶爾有一種情況,我有一個BaseModel實例,需要弄清楚哪個類正在從這個實例繼承。
給定一個BaseModel的實例,我們稱它爲base,Django的ORM提供base.child和base.secondchild。目前,我有一個方法循環遍歷所有這些方法。它看起來是這樣的:
class BaseModel(models.Model):
...
def get_absolute_url(self):
url = None
try:
self.child
url = self.child.get_absolute_url()
except Child.DoesNotExist:
pass
if not url:
try:
self.secondchild
url = self.secondchild.get_absolute_url()
except SecondChild.DoesNotExist:
pass
if not url:
url = '/base/%i' % self.id
return url
這是絕望醜陋的,並與我擁有的每一個額外的孩子班級醜陋。有沒有人有更好的,更pythonic的方式來做到這一點?
最後如果不是真的需要,是嗎? – Macke 2009-11-05 21:36:21
謝謝!男人,我覺得很愚蠢。 – Udbhav 2009-11-05 21:47:08