任何集合都是系统称为“查询集”的东西,可以通过各种运算符进行过滤。
例如,要查找包含名称“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
: 检查给定字段的值是否在提供的列表中;预期为项目列表。
布尔值可以指定为 True
或 1
表示真,False
或 0
表示假(两者均不区分大小写)。
空值可以指定为 None
或 Null
(两者均不区分大小写),但建议使用 isnull
查找以显式检查空值。
列表(用于 in
查找)可以指定为以逗号分隔的值列表。
根据请求用户的访问级别进行过滤,通过查询字符串参数(在 Ansible Tower 3.1 中添加)
role_level
: 要过滤的角色级别,例如 admin_role