我的应用程序使用类继承来尽量减少我的模型重复。我的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