我必须实现一组过滤器(见图)。我的代码适用于 1 个过滤器,例如
http://127.0.0.1:8000/api/constructions?field=developer&value=1 -- 按 id =1 的开发人员过滤
我想在一个请求中按多个过滤器进行过滤。我可以使用这样的东西
有没有更好的方法来解决我的问题?
视图.py
class ConstructionView(viewsets.ModelViewSet):
serializer_class = ConstructionSerializer
queryset = Construction.objects.all()
pagination_class = BasePagination
def list(self, request):
field = request.GET.get('field', None)
value = request.GET.get('value', None)
if field is not None and value is not None:
queryset = Construction.objects.filter(**{field:value})
else:
queryset = Construction.objects.all()
page = self.paginate_queryset(queryset)
if page is not None:
serializer = ConstructionSerializer(page, many=True)
return self.get_paginated_response(serializer.data)
else:
serializer = ConstructionSerializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
如果你有一个清单,query_params
你可以使用这种方法。您可以检查您的值query_params
是列表还是字符串并将其应用于过滤器。<fieldname>__in
适用于列表。
custom_filter = {'field__in': request.query_params.get('field'), 'value__in': request.query_params.get('value')}
queryset = Construction.objects.filter(**custom_filter )
也许djangorestframework-queryfields可以帮助您完成一些常见的工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句