在Django中扩展模型

在Django中扩展模型,django,django-models,Django,Django Models,我有一个这样的模型: class Model1(models.Model): . . . 和一个扩展模型: class Model2(Model1): . . . 使用此查询: model1 = Model1.objects.all() 如何通过上述查询找到属于继承模型(Model2)的项 编辑: 我想从Model1访问此查询: class Model1(models.Model): def is_model2(self):

我有一个这样的模型:

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

提前感谢

假设
Model1
没有
类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())
很难从你给我们的一点点钱中判断哪种选择是最好的

编辑:如果您只想让函数告诉您
Model1
是否是
Model2
,那么您只需要:

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

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

上面的查询是否检索到属于
Model1
Model2
的项目?是的,会的,因为所有
Model2
都是继承的
Model1
。或者您可以在一行中快速完成(如我的回答中所示)。:-)你真的应该解释你的答案是什么,它是如何工作的,等等。
values\u list()
是不必要的,
id\u in=Model2.objects.all()
就足够了。@MikeDeSimone,谢谢,但是:Manager不能通过Model1实例
类Model1(models.Model)访问:def是Model2(self):try:self.model2除model2.DoesNotExist:return False返回True