演算子を使用した結果のフィルタリング
様々な演算子を使用してコレクションをフィルタできます。 たとえば、特定のテキストを含むユーザーを検索するには、次のようにします。
http://<hostname or IP address>/api/v2/<multi_result_entity>/?<field_name>__contains=<text>
前述の例で、<hostname or IP address>はOracle Linux Automation ManagerのIPアドレスです。<multi_result_entity>は、たとえば、ユーザー・エンティティに複数のユーザー・インスタンスがある場合のように、複数の結果セットを含むエンティティです。<field_name>は検索テキストの適用先とするフィールドの名前で、<text>は検索するテキストの名前です。
特定の一致を検索するには、次の構文を使用します。
http://<hostname or IP address>/api/v2/<multi_result_entity>/?<field_name>=<text>
整数型のリソースについては、末尾に\_\_intを追加して、文字列入力値を整数として送信します。 たとえば、
http://<hostname or IP address>/api/v2/<multi_result_entity>/?<field_name>__int=<integer>
関連リソースをフィルタすることもできます。 たとえば、
http://<hostname or IP address>/api/v2/<multi_result_entity>/?<field_name>__icontains=<text>
そのテキストを含むフィールドを持つすべてのリソースが返されます。
また、複数のフィールドでフィルタすることもできます。 たとえば、
http://<hostname or IP address>/api/v2/<multi_result_entity>/?<field_name>__icontains=<text>&<field_name>=<text>
使用可能なオペレータ・タイプの詳細は、次のWebサイトを参照してください: https://docs.djangoproject.com/en/dev/ref/models/querysets/
追加の問合せ文字列パラメータを使用して、返される結果のリストをフィルタし、指定した値と一致するものに絞り込むことができます。 フィルタリングに使用できるのは、データベースに存在するフィールドとリレーションのみです。 指定した値に含まれる特殊文字は、URLエンコードする必要があります。 たとえば:
?field=value%20xyz
また、フィールドは、そのデータベースで定義されているフィールドとリレーションシップについてのみ、複数のリレーションにまたがることができます。
?other__field=value
特定の基準と一致する結果を除外するには、フィールド・パラメータの前にnot__を付けます。
?not__field=value
デフォルトでは、すべての問合せ文字列フィルタがAND演算子を使用して結合されるため、すべてのフィルタと一致する結果のみが返されます。 複数の基準のいずれかと一致する結果を結合するには、それぞれの問合せ文字列パラメータの前にor__を付けます。
?or__field=value&or__field=othervalue
?or__not__field=value&or__field=othervalue
デフォルトの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: exactの大/小文字を区別しないバージョン。
-
contains: フィールドに値が含まれます。
-
icontains: containsの大/小文字を区別しないバージョン。
-
startswith: フィールドが値で始まります。
-
istartswith: startswithの大/小文字を区別しないバージョン。
-
endswith: フィールドが値で終わります。
-
iendswith: endswithの大/小文字を区別しないバージョン。
-
regex: フィールドが、指定された正規表現と一致します。
-
iregex: regexの大/小文字を区別しないバージョン。
-
gt: 「より大きい」比較。
-
gte: 「以上」比較。
-
lt: 「より小さい」比較。
-
lte: 「以下」比較。
-
nullである: 指定されたフィールドまたは関連オブジェクトがNULLかどうかをチェックします。ブール値を想定します。
-
in: 指定されたフィールドの値が、提供されたリストに存在するかどうかをチェックします。項目のリストを指定します。
-
ブール値は、trueの場合はTrueまたは1、falseの場合はFalseまたは0として指定できます(どちらも大/小文字の区別なし)。
null値はNoneまたはNullとして指定できますが(どちらも大/小文字の区別なし)、isnullルックアップを使用してnull値を明示的にチェックすることをお薦めします。
リストは(inルックアップの場合)、カンマ区切りの値リストとして指定できます。
問合せ文字列パラメータによる、リクエスト・ユーザーのアクセス・レベルに基づいたフィルタリング:
-
role_level: フィルタするロールのレベル(admin_roleなど)