我有两个模型,而不是从同一个抽象基类继承。
我希望能够从类基类的子类中获取所有实例,例如AbstractClass.objects.all()
当然,我可以加入对所有孩子的查询,但这很糟糕,如果我添加新的子课程,它就会停止工作。
Django ORM可以实现吗?什么是优雅的解决方案?
答案 0 :(得分:1)
我使用过django的其他继承方法,因为我遇到了你遇到的同样问题。我不确定是否有一个优雅的解决方案。最终,您需要在数据库上完成多个查询,并将结果合并在一起。我无法想象支持ORM的ORM。
以下是针对这种情况的常见做法:
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()