2017-10-27 1 views
0

Ich überschreibe derzeit die List-Methode des ModelViewSet und die Verwendung von filter_fields, aber ich erkannte, dass der Filter vor der Liste angewendet wird, so dass meine List-Methode nicht durch den Abfrageparameter gefiltert wird. Ist es möglich, diesen Filter nach der Listenmethode anzuwenden?Wie Filter nach den Abrufmethoden anwenden?

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) 

Wenn ich Antrag tun mit dieser URL http://localhost:8000/api/account/?country__name=Germany, gibt sie alle per Bank gefiltert Konten aber nicht nach Land unterschiedlich.

Antwort

0

Ich habe das Problem behoben. Ich musste die filter_queryset in der queryset des ViewSet anwenden und verwenden. queryset = self.filter_queryset(self.get_queryset())

Verwandte Themen