我正在尝试使用Django的.filter()方法以及相关子对象列表来返回包含所有子记录的父对象集 . 见下面的例子 .
User是父对象,Color是与User直接相关的子对象
-
User1有颜色[红色,蓝色]
-
User2有颜色[黑色,紫色,绿色,蓝色]
-
User3有颜色[红色,蓝色,绿色]
-
User4有颜色[红色,蓝色,绿色,白色]
users = users.filter(user_colors__color__in = colors)
colors是POST设置的列表 . 例如 . [红色,蓝色,绿色]
目前,用户包含具有[红色,蓝色,绿色]中任何一个的用户集 . 对于上面的示例集,我目前正在使用上面的代码获取User1,User2,User3和User4 . 即它正在使用OR搜索 . 我想只返回具有所有指定颜色的用户 . 即使用AND搜索 . 对于上面的示例,我想只获取User3和User4 .
获取具有所有请求的子记录(颜色)的父记录集(用户)的最佳方法是什么?是否有一个Django方法可以轻松地做到这一点?或者我需要一个过滤每种颜色的循环?
谢谢!
2 回答
一个简单的for循环就足够了:
连续过滤器将作为AND运行
假设您从其他地方获取颜色列表,我猜是这样的:
这没有经过测试,但我相信应该是这样的 .
在任何情况下,您都应该阅读使用Q objects过滤 .