在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