【发布时间】:2017-06-18 21:32:22
【问题描述】:
我正在尝试使用带有相关子对象列表的 Django 的 .filter() 方法来返回包含所有子记录的父对象集。请参见下面的示例。
User是父对象,Color是与User直接相关的子对象
- User1 有颜色
[red, blue] - User2 有颜色
[black, purple, green, blue] - User3 有颜色
[red, blue, green] - User4 有颜色
[red, blue, green, white]
users = users.filter(user_colors__color__in=colors)
colors 是 POST 设置的列表。例如。 [red, blue, green]
当前,users 包含具有[red, blue, green] 中的任何一个的用户集。对于上面的示例集,我目前正在使用上面的代码获得User1、User2、User3 和User4。 IE。它使用 OR 搜索。我只想返回具有所有指定颜色的用户。 IE。使用 AND 搜索。对于上面的例子,我只想得到User3 和User4。
仅获取包含所有请求的子记录(颜色)的父记录集(用户)的最佳方法是什么?有没有可以轻松做到这一点的 Django 方法?还是我需要一个循环来过滤每种颜色?
谢谢!
【问题讨论】:
-
我建议你阅读 Django 查询集 API here
-
请发布您的模型,以便我们了解关系是如何定义的。