扩展Django中的模型

时间:2012-04-12 12:06:42

标签: django django-models

我有一个这样的模型:

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

提前致谢

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

假设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,那么您只需要:

class Model1(models.Model):
    def is_model2(self):
        try:
            self.model2
        except Model2.DoesNotExist:
            return False
        return True