1

我有一个这样的模型:

class Model1(models.Model):
    .
    .
    .

和扩展模型:

 class Model2(Model1):
    .
    .
    .

使用此查询:

model1 = Model1.objects.all()

如何使用上述查询找到属于继承模型 (Model2) 的项目?

编辑:我想从 Model1 访问这个查询:

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

提前致谢

4

2 回答 2

2

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

于 2012-04-12T14:07:34.303 回答
1

假设Model1没有class Meta: abstract = True,这是多表继承。

你可以使用:

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())

很难从您给我们的少量信息中判断哪个选项是最好的。

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

class Model1(models.Model):
    def is_model2(self):
        try:
            self.model2
        except Model2.DoesNotExist:
            return False
        return True
于 2012-04-12T12:17:06.877 回答