2008-12-10 70 views
8

我有几个模型,并希望返回属于用户的所有模型的查询集,我想知道是否有可能从多个模型返回一个QuerySet?跨模型的Django Queryset?

+0

Duplicate:http://stackoverflow.com/questions/313137/using-django-how-can-i-combine-two-queries-from-separate-models-into-one-query – 2008-12-10 21:32:08

回答

8

我假设你的意思是你想从每个模型中返回属于该用户的所有对象的单个查询集。

你需要一个查询集还是只是一个迭代? AFAIK,异构qs是不可能的。然而,你可以轻松地返回一个列表,一个链式迭代器(itertools)或一个生成器来做你想做的事情。这假设提前知道引用用户的模型。假设默认related_name,相关查询集的属性可以从用户实例通过模型的名称访问:

qs = getattr(user, '%s_set' % model_name.lower()); 

当然,使用任何异构列表,你要么只能使用领域或会在所有这些模型中定义的方法,否则你将不得不确定每个对象的类型来执行任何类型特定的操作。

3

您的模型必须包含关系字段(ForeigKey和ManyToManyField),并设置related_name关键字参数。检查文档here