当前位置: 首页 > 知识库问答 >
问题:

Django筛选器使用和在列表上设置查询集

孔征
2023-03-14

我想用Django的。具有相关子对象列表的filter()方法返回包含所有子记录的父对象集。见下面的例子。

用户是父对象,颜色是与用户直接相关的子对象

  • 用户1有颜色[红色,蓝色]
  • User2有颜色[黑色、紫色、绿色、蓝色]
  • User3有颜色[红、蓝、绿]
  • User4有颜色[红、蓝、绿、白]

users=用户。过滤器(用户颜色=颜色)

“颜色”是由帖子设置的列表。例如,[红色、蓝色、绿色]

当前,用户包含具有任何[红色、蓝色、绿色]的用户集。对于上面的示例集,我目前正在使用上面的代码获取User1User2User3User4。也就是说,它正在使用OR搜索。我只想返回具有所有指定颜色的用户。即,使用和搜索。对于上面的示例,我只想获取User3User4

只有父记录(用户)集具有所有请求的子记录(颜色),最好的方法是什么?有没有Django方法可以很容易地做到这一点?或者我需要一个循环来过滤每种颜色?

谢谢!

共有2个答案

东郭展
2023-03-14

假设您从其他地方获得颜色列表,我猜是这样的:

from django.db.models import Q

# list of color instances
colors = [red, green, blue]

# create a list Q filters dynamically 
filter_by_this = [Q(user_colors__color=color) for color in colors]

# filter using the filter as a list of arguments
users = users.filter(*filter_by_this)

这没有经过测试,但我认为应该是这样的。

在任何情况下,您都应该阅读有关使用Q对象进行过滤的内容。

沈畅
2023-03-14

一个简单的for循环就足够了:

# list of color instances
colors = [red, green, blue]

for x in colors:
    users = users.filter(user_colors__color=x) 

连续过滤器将作为AND操作

 类似资料:
  • 存储在Django模型中的元素如下 示例数据如下: . 结果:找到对象- 结果:找到对象- 结果:找到对象- 结果:未找到对象 如何使用过滤器和正则表达式进行这些查询?

  • 我看不到任何关于何时应该使用查询或过滤器或两者结合的描述。他们之间有什么区别?谁能解释一下吗?

  • 为了提供良好的用户体验,实现需要做一些事情 视图中的 : 检查传递的筛选器参数是否有效 检查筛选器的类型(基于其他模型或自定义筛选器),以便将正确的条件应用于查询集 (可选)使筛选器累积的方法(即可以不断添加筛选器) 根据筛选器选择显示正确的结果集n 显示筛选器时,请识别应用的筛选器,以便当前应用的筛选器显示为文本,而不是超链接。

  • 问题内容: 这是形式的字段声明: 我想将初始值设置为,这似乎不起作用。我玩过参数,引号/无引号等,但是没有变化。 如果有可能,谁能给我一个明确的答案?和/或对我的代码段进行必要的调整? 我正在使用Django 1.0 问题答案: 实例化表单时,请尝试设置初始值:

  • 我正在制作一个过滤器,允许我生成一个映射,其值是文件列表,为此,我尝试使用流。我有以下文件列表示例: null 这段代码只是使用键将CLA文件保存在映射中的列表中。这是正确的,但我需要添加其余的文件。

  • 我需要过滤一个列表