扩展机型在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
在此先感谢
答
假设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
,那么你只需要:
上述查询是否检索属于'Model1'和'Model2'的项目? – 2012-04-12 12:11:29
是的,它会的,因为所有'Model2'都是继承的'Model1'。 – 2012-04-12 12:17:55