扩展机型在Django中

问题描述:

我有这样一个模型:扩展机型在Django中

class Model1(models.Model): 
    . 
    . 
    . 

和扩展模型:

class Model2(Model1): 
    . 
    . 
    . 

与此查询:

model1 = Model1.objects.all() 

我如何才能找到的项目,属于具有上述查询的继承模型(Model2)?

编辑: 我要访问从型号1这个查询:

class Model1(models.Model): 
     def is_model2(self): 
     m2 = self.objects.filter(model2__isnull=False) 
      if m2.count() > 0: 
       if self in m2: 
        return True 
       else: 
        return False 

在此先感谢

+0

上述查询是否检索属于'Model1'和'Model2'的项目? – 2012-04-12 12:11:29

+0

是的,它会的,因为所有'Model2'都是继承的'Model1'。 – 2012-04-12 12:17:55

假设Model1没有class Meta: abstract = True,这是multi-table inheritance.

你可以使用:

model2 = Model2.objects.all() 

因为所有Model2对象Model1,或者你可以在同一时间通过你的查询之一:

for m in model1: 
    try: 
     m.model2 # Try to use the Model2 object 
    except Model2.DoesNotExist: 
     pass 

或过滤器查询:

q = model1.filter(id__in=Model2.objects.all()) 

很难说哪个选择是最好从什么小你给我们。

编辑:如果你只是想一个函数来告诉你,如果一个Model1Model2,那么你只需要:

​​
+0

或者你可以在一行中快速完成(就像在我的回答中一样)。 :-) – DrTyrsa 2012-04-12 12:20:10

+0

你真的应该解释你的答案,它是如何工作的,等等。 – 2012-04-12 12:37:25

+1

'values_list()'是不必要的,''id__in = Model2.objects.all()'就足够了。 – okm 2012-04-12 13:01:21

您还可以使用InheritanceManagerdjango-model-utils。即使查询基本模型,它也会返回正确的实例。