gpt4 book ai didi

python - 如何在 Django Rest Framework 上将普通过滤器与 SearchFilter 一起使用?

转载 作者:太空狗 更新时间:2023-10-29 18:18:30 28 4
gpt4 key购买 nike

我正在使用 DRF(Django Rest Framework)。

我声明了一个 ModelViewSet,现在我想在上面添加过滤器。

class GoodsViewSet(viewsets.ModelViewSet):
class Filter(FilterSet):
class Meta:
model = m.Goods

filter_class = Filter
filter_backends = (SearchFilter, Filter)
search_fields = ['name',]
queryset = m.Goods.objects.all()
serializer_class = s.GoodsSerializer

看到我声明了一个 Filter 子类并应用了它:

filter_class = Filter

它在开始时起作用,在我添加以下行之前:

filter_backends = (SearchFilter, Filter)
search_fields = ['name',]

the doc 告诉我们的.

现在应用搜索过滤器,同时跳过正常的 filter_class

一句话,他们不能一起工作。

如何解决这个问题?

最佳答案

最后,我发现我们应该同时指定两个 filter_backends:

from rest_framework.filters import SearchFilter
from django_filters.rest_framework import DjangoFilterBackend

class GoodsViewSet(viewsets.ModelViewSet):
class Filter(FilterSet):
class Meta:
model = m.Goods

filter_class = Filter
filter_backends = (SearchFilter, DjangoFilterBackend)
search_fields = ['name',]
queryset = m.Goods.objects.all()
serializer_class = s.GoodsSerializer

或者我们可以忽略特定 ViewSet 类上的 filter_backends 字段,但在 settings.py 中全局应用它们:

REST_FRAMEWORK = {
# ... other configurations
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.SearchFilter',
'django_filters.rest_framework.DjangoFilterBackend',
),
}

以便 filter_classsearch_fields 选项在 ViewSet 上同时可用。

关于python - 如何在 Django Rest Framework 上将普通过滤器与 SearchFilter 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40417970/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com