2014-04-22 4 views
4

Django REST Framework를 사용한 적이 있지만 API보기에서 알려진 관계를 제외한 모든 것을 검색해야하는 상황이 발생했습니다. 설명서를 다시 살펴본 후에는이 기능을 구현하는 기본 제공 메커니즘을 볼 수 없습니다. 내 목록보기에서 get_queryset()을 무시하고 사용자 지정 URL 쿼리 매개 변수를 구문 분석 한 다음 필터링을 수행 할 수 있다는 것을 알고 있지만 다른 사용자가보다 세련된 솔루션을 갖고 있는지 궁금합니다. 좀 더 연구 한 후Django REST Framework에서 제외 또는 제외 필터

업데이트

, 이것은 장고 필터 질문이 더있을 것 같다, 나는 어떤 기능을 제외 언급을 찾을 수 없습니다. 나는이 찾을 않았다

https://bitbucket.org/mjs7231/django-rest-framework-filtering

결과에서 제외 값을 제공한다. 당신은 당신이 django-rest-framework-filters을 사용할 수 있습니다 custom filter backend

답변

2

는 소리가 난다. 이 패키지는 쿼리 문자열 key! = value의 제외 구문을 지원합니다.

예 :/api/search? 이름! = Alex

+0

감사합니다. 이것은 'get_queryset' 재정의보다 바람직합니다. 나는 다른 어떤 방법도 보지 못한다. 나는 이것이 django-filter가이 기능을 가지지 않는 문제라고 생각한다. – Fiver

+0

필터가 복잡하고 다중 인 경우 get_queryset를 무시하면 지저분해질 수 있습니다. 다른 방법은 여기에 : http://stackoverflow.com/questions/14258338/django-rest-framework-filtering/35506369#35506369 – iankit

0

를 검색하는 것처럼

+0

이것은 이론적으로 질문에 대답 할 수 있지만 여기에 대한 답변의 핵심 부분을 포함하는 것이 가장 좋습니다. 미래의 사용자에게 제공하고 참조 용 링크를 제공하십시오. 링크가 지배하는 응답이 유효하지 않게 될 수 있습니다. – abarisone

3

필터 세트의 필터 정의에 exclude 매개 변수를 사용하십시오.

class MyFilterSet(FilterSet): 
    negated_field__not = django_filters.NumberFilter(name='negated_field', exclude=True) 

    class Meta: 
     model = Model 
     fields = ['some_field', 'some_other_field'] 

class MyViewSet(viewsets.ReadOnlyModelViewSet): 
    queryset = Model.objects.all() 
    serializer_class = SomeSerializer 

    filter_backends = (DjangoFilterBackend,) 
    filter_class = MyFilterSet 

이는 Model.objects.all().exclude(negated_field__exact=value)과 같습니다. 프론트 엔드에서 다음과 같이 URL 요청을 제외 할 수 있습니다 : /api/my_viewset/?negated_field__not=value.

관련 문제