我目前正在覆盖ModelViewSet的list方法并使用filter_fields但我意识到过滤器是在列表之前应用的,所以我的list方法没有被查询参数过滤。是否可以在list方法之后应用此过滤器?
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)
当我请求使用此网址http://localhost:8000/api/account/?country__name=Germany
时,它会返回按银行过滤但不按国家/地区过滤的所有帐户。
答案 0 :(得分:0)
我解决了这个问题。我必须在ViewSet的filter_queryset
中应用queryset
并使用它。 queryset = self.filter_queryset(self.get_queryset())