文档

6. 过滤

任何集合都是系统称为“查询集”的东西,可以通过各种运算符进行过滤。

例如,要查找包含名称“foo”的组

http://<Tower server name>/api/v2/groups/?name__contains=foo

要查找完全匹配项

http://<Tower server name>/api/v2/groups/?name=foo

如果资源是整数类型,您必须在末尾添加 \_\_int 以将您的字符串输入值转换为整数,例如

http://<Tower server name>/api/v2/arbitrary_resource/?x__int=5

也可以查询相关资源,例如

http://<Tower server name>/api/v2/users/?first_name__icontains=kim

这将返回所有名称中包含字符串“Kim”的用户。

您也可以同时根据多个字段进行过滤

http://<Tower server name>/api/v2/groups/?name__icontains=test&has_active_failures=false

这将找到所有包含名称“test”并且没有活动故障的组。

有关可用运算符类型的更多信息,请参考:https://docs.django.ac.cn/en/dev/ref/models/querysets/

注意

您还可以观察 API,因为 UI 正在使用它来查看它如何根据各种条件进行过滤。

任何其他查询字符串参数都可用于过滤返回的结果列表,使其与给定值匹配。仅数据库中存在的字段和关系可用于过滤。指定值中的任何特殊字符都应进行 URL 编码。例如

?field=value%20xyz

字段也可以跨越关系,但仅限于数据库中定义的字段和关系

?other__field=value

要排除与特定条件匹配的结果,请在字段参数前加上 not__

?not__field=value

(在 AWX 1.4 中添加) 默认情况下,所有查询字符串过滤器都进行 AND 连接,因此只有匹配所有过滤器的结果才会返回。要组合匹配任何一个多个条件的结果,请在每个查询字符串参数前加上 or__

?or__field=value&or__field=othervalue
?or__not__field=value&or__field=othervalue

(在 Ansible Tower 1.4.5 中添加) 默认 AND 过滤将所有过滤器同时应用于跨数据库关系过滤的每个相关对象。链过滤器改为分别对每个相关对象应用过滤器。要使用,请在查询字符串参数前加上 chain__

?chain__related__field=value&chain__related__field2=othervalue
?chain__not__related__field=value&chain__related__field2=othervalue

如果上面的第一个查询写成 ?related__field=value&related__field2=othervalue,它将只返回同一个相关对象满足这两个条件的主对象。如使用链过滤器所写,它将返回匹配每个条件的主对象的交集。

字段查找也可用于更高级的查询,方法是将查找附加到字段名称

?field__lookup=value

支持以下字段查找

  • exact: 精确匹配(如果没有指定,则为默认查找)。

  • iexact: 精确匹配的不区分大小写版本。

  • contains: 字段包含值。

  • icontains: 包含的不区分大小写版本。

  • startswith: 字段以值开头。

  • istartswith: 以值开头的忽略大小写的版本。

  • endswith: 字段以值结尾。

  • iendswith: 以值结尾的忽略大小写的版本。

  • regex: 字段与给定的正则表达式匹配。

  • iregex: 正则表达式的不区分大小写版本。

  • gt: 大于比较。

  • gte: 大于或等于比较。

  • lt: 小于比较。

  • lte: 小于或等于比较。

  • isnull: 检查给定字段或相关对象是否为空;预期为布尔值。

  • in: 检查给定字段的值是否在提供的列表中;预期为项目列表。

  • 布尔值可以指定为 True1 表示真,False0 表示假(两者均不区分大小写)。

空值可以指定为 NoneNull(两者均不区分大小写),但建议使用 isnull 查找以显式检查空值。

列表(用于 in 查找)可以指定为以逗号分隔的值列表。

根据请求用户的访问级别进行过滤,通过查询字符串参数(在 Ansible Tower 3.1 中添加)

  • role_level: 要过滤的角色级别,例如 admin_role