Documentation

6. フィルタリング

コレクションとは、システムが “queryset” と呼ぶもので、各種演算子を使用してフィルタリングすることができます。

例えば、名前に “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.djangoproject.com/en/dev/ref/models/querysets/ を参照してください。

注釈

UI を使って各基準に対してフィルタリングを実行している際に、API を確認することもできます。

特定の値に一致する結果一覧に対して、追加のクエリー文字列パラメーターを使ってフィルタリングすることもできます。このフィルタリングに使用できるのは、データベースに存在するフィールドと関係のみです。指定された値の特殊文字は、エンコードされた 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__ をクエリー文字列パラメーターの前に追加します。

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

上記で最初のクエリーが ?related__field=value&related__field2=othervalue となっていれば、同一の関連オブジェクトが両方の条件を満たしているプライマリーオブジェクトのみが返されますが、上記通りのチェーンフィルターを使用すると、各条件に一致するプライマリーオブジェクトの共通集合が返されます。

フィールド名に lookup を追加すると、より詳細なクエリーによるフィールドルックアップが可能になります。

?field__lookup=value

以下のフィールドのルックアップがサポートされています。

  • exact: 完全一致 (指定されない場合のデフォルトのルックアップ)
  • iexact: 大文字小文字の区別のない exact
  • contains: フィールドに値を含む
  • icontains: 大文字小文字の区別のない contains
  • startswith: 値で始まるフィールド
  • istartswith: startswith で大文字小文字の区別なし
  • endswith: 値で終わるフィールド
  • iendswith: 大文字小文字の区別のない exact
  • regex: 特定の正規表現に一致するフィールド
  • iregex: 大文字小文字の区別のない regex
  • gt: Greater than の比較条件
  • gte: Greater than or equal to の比較条件
  • lt: Less than の比較条件
  • lte: Less than or equal to の比較条件
  • isnull: 特定フィールドもしくは関連オブジェクトが null かどうかをチェック。ブール値を想定
  • in: 特定フィールドの値が提供されたリストに存在するかどうかをチェック。アイテムのリストを想定
  • ブール値は true の場合 True または 1 を、false の場合は False または 0 を指定します (どちらも大文字小文字の区別なし)。

Null 値は None または Null (どちらも大文字小文字の区別なし) を指定できますが、isnull ルックアップを使用して明示的に null 値をチェックすることが推奨されます。

in ルックアップのリストは、値をコンマ区切りのリストとして指定することができます。

クエリー文字列のパラメーターによるユーザーのアクセスレベルのリクエストをベースにしたフィルタリング (Ansible Tower 3.1 で追加)。

  • role_level: フィルターをかけるロールのレベル。例: admin_role