跨模型的Django查询集?

8

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


重复:https://dev59.com/Q3VC5IYBdhLWcg3wYQAp - S.Lott
2个回答

8
我假设你的意思是希望返回一个单一的查询集,其中包含每个模型中属于用户的所有对象。
你需要一个查询集还是一个可迭代对象?据我所知,异构查询集是不可能的。但是,你可以轻松地返回一个列表、一个链接迭代器(itertools)或一个生成器来实现你想要的功能。这假定引用用户的模型已经提前知道。假设使用默认的related_name,related queryset属性可以通过模型的名称从用户实例中访问:
qs = getattr(user, '%s_set' % model_name.lower());

当然,如果您使用任何异构列表,您只能使用在所有这些模型中定义的字段或方法,否则您将不得不确定每个对象的类型才能执行任何特定于类型的操作。

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接