栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

关于如何使用DRF进行过滤的问题

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于如何使用DRF进行过滤的问题

  • 在restframework中使用通用过滤后端进行过滤,官方教程中给的是使用通用视图类,其中大部分功能都已经写好,我们只需要将特定的参数配置好就可以使用
  • 下面说一下,我使用的是Viewset视图进行编写,这个视图只是具备了restframework中一些基础的功能,大部分的逻辑需要自己去定义,对于需要高度定制自己的逻辑的开发者,可以使用这个基类
  • 直接上代码:
    1.首先配置settings文件:
REST_frameWORK = {
    # Use Django's standard `django.contrib.auth` utils,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
    
}
2. 编写视图函数
class FileViewSet(ViewSet):
	filter_backends = api_settings.DEFAULT_FILTER_BACKENDS
    filter_fields = ('create_time',"file_owner__username","file_name")
    def get_queryset(self):
        return DataManager.objects.all()

    def filter_queryset(self, queryset):
        for backend in list(self.filter_backends):
            queryset = backend().filter_queryset(self.request, queryset, self)
        return queryset
        
    def get_object(self, request, pk=None):
        queryset = self.filter_queryset(self.get_queryset())
        # Perform the lookup filtering.
        lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
        filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]}
        obj = get_object_or_404(queryset, **filter_kwargs)

        serializer = FileSerializer(obj,context={"request":request})
        return Response(serializer.data)

    def get_list(self, request):
        queryset = self.filter_queryset(self.get_queryset())
        serializer = FileSerializer(queryset, context={"request": request}, many=True)
        return Response(serializer.data)

filter_fields:这个字段是我写这篇文章需要强调的地方,当进行过滤是,对于我们的常规字段,比如像charField字段,这种不需要特殊处理,而对于外键字段的话,我们需要通过反向查询来指定需要查询的字段,因为我们通过外键绑定的是对象,默认情况下是使用ID进行查询,但是这往往不是我们想要的,因为当用户进行查询或者过滤时,我们需要提供的是比如说想用户名或者时间等等参数,而不是数据库中对应的ID,我们通过外键绑定的是对象,这点要注意

好了这篇文章就写到这里了,如果有什么疑问的话,欢迎在下面评论区进行留言

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号