2017-10-27 9 views
0

현재 ModelViewSet의 list 메서드를 재정의하고 filter_fields를 사용하고 있지만 필터가 목록보다 먼저 적용되므로 내 list 메서드가 쿼리 param에 의해 필터링되지 않습니다. 목록 메서드 다음에이 필터를 적용 할 수 있습니까? 나는이 URL http://localhost:8000/api/account/?country__name=Germany를 사용하여 요청을 수행 할 때검색 방법 다음에 필터를 적용하는 방법은 무엇입니까?

class AccountViewSet(viewsets.ModelViewSet): 
    serializer_class = AccountSerializer 
    filter_fields = ('country__name') 
    filter_backends = (django_filters.rest_framework.DjangoFilterBackend,) 
    queryset = Account.objects.all() 

    def list(self, request): 
     if request.user.is_superuser: 
      queryset = Account.objects.all() 
     else: 
      bank_user = BankUser.objects.get(user=request.user) 
      queryset = Account.objects.filter(bank=bank_user.bank) 
     serializer = self.get_serializer(queryset, many=True) 
     return Response(serializer.data) 

, 그것은 은행이 아닌 국가에 의해 필터링 된 모든 계정을 반환합니다.

답변

0

문제가 해결되었습니다. ViewSet의 querysetfilter_queryset을 적용하고 사용해야했습니다. queryset = self.filter_queryset(self.get_queryset())