python - djangorest框架中django过滤器后端的条件?

标签 python django rest django-rest-framework django-filter

我在几个字段上使用 Django 过滤器后端,效果非常好。但我想在获得特定条件时过滤字段,例如,如果 user_type 是基本获取过滤器查询,否则从模型中获取所有对象。我的过滤器代码在这里:

http_method_names = ['get']
serializer_class = SearchSerializer
pagination_class = LargeResultsSetPagination


filter_backends = (DjangoFilterBackend,)
filter_fields = ('property_zipcode', 'property_state', 'property_county',)

我需要的是:

def get_queryset(self):
    if self.request.query_params.get('basic',None):
       filter_backends = (DjangoFilterBackend,)
       filter_fields = ('property_zipcode', 'property_state', 'property_county',)
       return filtered_query # I want to return filter query from here.

    queryset = property.objects.all();
    return queryset

我是 Django Rest 框架和 Django 过滤器后端的新手。如果有人尝试做这件事,请帮助我。

最佳答案

这就是您所需要的:

class YourClass(ModelViewSet):
    serializer_class = SearchSerializer
    pagination_class = LargeResultsSetPagination
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('property_zipcode', 'property_state', 'property_county',)

    def filter_queryset(self, queryset):
        if self.request.query_params.get('basic',None):
            queryset = super(YourClass,self).filter_queryset(self.get_queryset())
        else:
            queryset=self.get_queryset()
        return queryset

覆盖get_queryset不会按您的期望工作,因为filter_queryset方法是在get_queryset方法之后由框架调用的,DRF get_queryset 然后通过 filter_queryset 方法对其进行过滤。

关于python - djangorest框架中django过滤器后端的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47186526/

相关文章:

python - 如何使用 python 变量运行多个 Linux 命令

Python:如果语句评估为真,则获取索引

django-allauth 基本设置

python - Django 的测试客户端返回编码不正确的 URL

python - Django Rest Framework - 将带有文件和其他数据的多部分/表单数据发送到 API

swift - Vapor 3 - 如何在保存对象之前检查类似的电子邮件

rest - HTTP 303 是否被认为对异步操作有害?

php - 公共(public)端点和私有(private)端点是否应该有单独的 API?

python - Django 查询单下划线表现得像双下划线?

python - gdb:中断由python加载的共享库