【问题标题】:How to apply filter after the retrieve methods?如何在检索方法之后应用过滤器?
【发布时间】:2018-04-08 21:17:25
【问题描述】:

我目前正在覆盖 ModelViewSet 的 list 方法并使用 filter_fields 但我意识到过滤器是在列表之前应用的,所以我的 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)

当我使用此 URL http://localhost:8000/api/account/?country__name=Germany 请求时,它会返回所有按银行但不按国家/地区过滤的帐户。

【问题讨论】:

    标签: django django-rest-framework django-filter


    【解决方案1】:

    我解决了这个问题。我必须在 ViewSet 的 queryset 中应用 filter_queryset 并使用它。 queryset = self.filter_queryset(self.get_queryset())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2014-05-24
      • 2016-06-11
      • 1970-01-01
      相关资源
      最近更新 更多