我有一个这样的模型:
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
提前致谢
答案 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())
很难从你给我们的东西中找出哪个选项最好。
编辑:如果您只想要一个函数来告诉您Model1
是Model2
,那么您只需要:
class Model1(models.Model):
def is_model2(self):
try:
self.model2
except Model2.DoesNotExist:
return False
return True