Documentation

6. 필터링

모든 컬렉션은 “쿼리 세트”에 해당하며 다양한 연산자를 통해 필터링할 수 있습니다.

예를 들어, “foo”라는 이름이 포함된 그룹을 찾는 방법은 다음과 같습니다.

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

정확히 일치하는 항목을 찾으려면 다음을 수행합니다.

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

리소스가 정수 유형인 경우 문자열 입력 값을 정수로 캐스팅하려면 끝에 ``__int``를 추가해야 합니다.

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

다음과 같이 관련 리소스를 쿼리할 수도 있습니다.

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

이 스크립트는 이름에 “Kim”이라는 문자열이 포함된 사용자를 모두 반환합니다.

한 번에 여러 필드를 대상으로 필터링할 수도 있습니다.

http://<controller 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

특정 기준과 일치하는 결과를 제외하려면 field 매개변수 앞에 ``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: 비교 값보다 적거나 같습니다.

  • isnull: 지정된 필드 또는 관련 오브젝트가 null인지 확인합니다. 부울 값이 필요합니다.

  • in: 지정된 필드의 값이 제공된 목록에 있는지 확인합니다. 항목 목록이 있어야 합니다.

  • 부울 값은 True의 경우 True 또는 1, False의 경우 False 또는 ``0``으로 지정할 수 있습니다(둘 다 대소문자를 구분하지 않음).

예를 들어, ``?created__gte=2020-01-01``은 2020년 1월 1일 이후에 생성된 항목 목록을 제공합니다.

null 값은 None 또는 Null``로 지정할 있지만(둘 대소문자를 구분하지 않음), ``isnull 조회를 사용하여 null 값을 명시적으로 확인하는 것이 좋습니다.

목록(in 조회의 경우)은 쉼표로 구분된 값 목록으로 지정할 수 있습니다.

쿼리 문자열 매개변수를 통해 요청하는 사용자의 액세스 수준을 기준으로 필터링하는 방법은 다음과 같습니다(automation controller 3.1에서 추가됨).

  • role_level: 필터링할 역할의 수준(예: admin_role)