跨模型的Django Queryset?

时间:2008-12-10 20:07:42

标签: django django-models django-queryset

我有几个模型,想要返回属于用户的所有模型的查询集,我想知道是否可以从多个模型返回一个Queryset?

2 个答案:

答案 0 :(得分:8)

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

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

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

当然,使用任何异构列表,您只能使用在所有此类模型中定义的字段或方法,或者您必须确定每个对象的类型以执行任何类型特定的操作。

答案 1 :(得分:3)

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