3
我有兩個模型比從相同的抽象基類繼承。我如何獲得繼承自同一個父類的所有實例django
我希望能夠從作爲基類的東西,如AbstractClass.objects.all()班的孩子得到所有實例
當然,我可以對所有兒童連接查詢但這是可怕和它會停止工作,如果我添加新的兒童班。
這可能與Django ORM?什麼是優雅的解決方案?
我有兩個模型比從相同的抽象基類繼承。我如何獲得繼承自同一個父類的所有實例django
我希望能夠從作爲基類的東西,如AbstractClass.objects.all()班的孩子得到所有實例
當然,我可以對所有兒童連接查詢但這是可怕和它會停止工作,如果我添加新的兒童班。
這可能與Django ORM?什麼是優雅的解決方案?
我使用過django的其他繼承方法,因爲我遇到了同樣的問題。我不確定是否有優雅的解決方案。最終,您需要在數據庫上完成幾個查詢,並將結果合併到一起。我無法想象支持這一點的ORM。
下面是這種情況下我平時的hackish辦法:
class NotQuiteAbstractBaseClass(models.Model):
def get_specific_subclass(self):
if self.model1:
return self.model1
elif self.model2:
return self.model2
else:
raise RuntimeError("Unknown subclass")
class Model1(NotQuiteAbstractBaseClass):
def whoami(self):
return "I am a model1"
class Model2(NotQuiteAbstractBaseClass):
def whoami(self):
return "I am a model2"
然後,您可以查詢整個列表如下:
for obj in NotQuiteAbstractBaseClass.objects.iterator():
obj = obj.get_specific_subclass()
print obj.whoami()
我會等待一點點希望更好,但到目前爲止,似乎多個查詢是要走的路。你有一個聰明的方式來處理添加新的子類,或者如果添加更多的子類,你是否必須更新查詢? 我有相當多的OOP經驗,但只在80小時前開始Python,所以我非常有限。我確信有一種方法可以使它具有可調用函數的動態性。 – philgo20 2010-01-06 20:43:31
我也等着看看能否得到更好的答案。這是我的一個長期存在的問題。我使用標準的django繼承和查詢抽象基類。這裏的問題是你得到基類的實例,而不是你想要的特定子類。爲了解決這個問題,我在某個地方註冊了每個子類。然後我在我的基類上放了一個'get_specific_subclass()'方法。這基本上在數組上循環,並測試我們是否可以將其轉換爲該類型。我很想聽到更好的解決方案。我的方法完成了這項工作,但並不覺得「正確」。 – Gattster 2010-01-06 20:54:23
「我使用標準的django繼承和查詢抽象基類。」那是什麼意思 ?你能舉一個你在ABC上查詢的例子嗎?沒有設法做到這一點。 – philgo20 2010-01-07 14:23:53