Oop 如何获取从django中的同一父类继承的所有实例

Oop 如何获取从django中的同一父类继承的所有实例,oop,inheritance,orm,django-models,Oop,Inheritance,Orm,Django Models,我从同一个抽象基类继承了两个模型 我希望能够从具有AbstractClass.objects.all()之类的基类的子类中获取所有实例 当然,我可以加入所有子类的查询,但这太糟糕了,如果我添加新的children类,它就会停止工作 Django ORM是否可以实现这一点?优雅的解决方案是什么?我使用了django的其他继承方法,因为我遇到了与您遇到的问题相同的问题。我不确定是否有一个优雅的解决方案。最终,您需要在数据库上执行多个查询,并将结果合并在一起。我无法想象ORM会支持这一点 以下是我对这

我从同一个抽象基类继承了两个模型

我希望能够从具有AbstractClass.objects.all()之类的基类的子类中获取所有实例

当然,我可以加入所有子类的查询,但这太糟糕了,如果我添加新的children类,它就会停止工作


Django ORM是否可以实现这一点?优雅的解决方案是什么?

我使用了django的其他继承方法,因为我遇到了与您遇到的问题相同的问题。我不确定是否有一个优雅的解决方案。最终,您需要在数据库上执行多个查询,并将结果合并在一起。我无法想象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()

我会等待一点,希望能有更好的结果,但到目前为止,似乎多个查询是最好的选择。您是否有一个聪明的方法来处理添加新的子类,或者如果添加更多的子类,您是否必须更新查询?我有相当多的OOP经验,但80小时前才开始使用Python,所以我的能力非常有限。我确信有一种方法可以通过可调用函数使其动态化。我也会等待,看看我们是否能得到更好的答案。这是我的一个长期问题。我对抽象基类使用标准的django继承和查询。这里的问题是您得到的是基类的实例,而不是您想要的特定子类。为了解决这个问题,我在数组的某个地方注册了每个子类。然后我在基类上放置了一个
get\u specific\u subclass()
方法。这基本上是在数组上循环并测试我们是否可以转换为该类型。我想听听更好的解决办法。我的方法完成了任务,但感觉不“正确”。“我对抽象基类使用标准django继承和查询。”这意味着什么?你能举例说明你对ABC的查询吗?我没有做到。我更新了我的答案,让你明白我的意思。这并不完全是你的目的,但这是一个解决方案,我已经使用了好几次,运气好。我不想处理一个非astract类,所以我将加入查询。不是很动态,因为我将不得不更新代码以添加新的子类,但现在将完成这项任务。