Joe*_*ran 2 django-filter django-rest-framework
我正在使用 django-filter 在 drf 中过滤我的视图集。
当我有一个ModelViewset, 像下面的例子一样工作正常:
class MyExampleViewSet(viewsets.ModelViewSet):
queryset = myqueryset
model = ModelExample
filter_backends = (DjangoFilterBackend, OrderingFilter,)
filterset_fields = {
"field_example": ["exact", "icontains"],
"another_field_example": ["exact", "range"],
}
serializer_class = MyExampleViewSet
Run Code Online (Sandbox Code Playgroud)
我的问题是当我list使用 a覆盖方法时ViewSet,如下所示:
class MyExampleViewSet(viewsets.ViewSet):
def list(self, request, queryset=queryset, *args, **kwargs):
return something
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我的过滤器不起作用。在这种情况下(覆盖列表)有没有使用 django-filter 的方法?
我知道我可以用 query_params 做什么,但我想使用 django-filter。
首先,您应该看看该list方法是如何实现的:
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
此时应用了 Django-filter queryset = self.filter_queryset(self.get_queryset())。
因此,如果您想覆盖 list 方法但保留过滤功能,请确保使用查询集进行调用self.filter_queryset()。
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |