• django restframework 批量查询


    方案一:

    重写get_queryset

    根据查询参数过滤

    过滤初始查询集的最后一个示例是根据 url 中的查询参数确定初始查询集。

    我们可以覆盖.get_queryset()以处理诸如 之类的 URL http://example.com/api/purchases?username=denvercoder9,并且仅当usernameURL 中包含参数时才过滤查询集

    class PurchaseList(generics.ListAPIView):
        serializer_class = PurchaseSerializer
    
        def get_queryset(self):
            """
            Optionally restricts the returned purchases to a given user,
            by filtering against a `username` query parameter in the URL.
            """
            queryset = Purchase.objects.all()
            username = self.request.query_params.get('username')
            if username is not None:
                queryset = queryset.filter(purchaser__username=username)
            return queryset


    方案二:通用过滤器

    自定义通用过滤

    您还可以提供自己的通用过滤后端,或编写一个可安装的应用程序供其他开发人员使用。

    这样做覆盖BaseFilterBackend,并覆盖.filter_queryset(self, request, queryset, view)方法。该方法应该返回一个新的、过滤的查询集。

    除了允许客户端执行搜索和过滤之外,通用过滤器后端还可用于限制哪些对象应该对任何给定请求或用户可见。

    例子

    例如,您可能需要限制用户只能看到他们创建的对象。

    class IsOwnerFilterBackend(filters.BaseFilterBackend):
        """
        Filter that only allows users to see their own objects.
        """
        def filter_queryset(self, request, queryset, view):
            return queryset.filter(owner=request.user)

    我们可以通过覆盖get_queryset()视图来实现相同的行为,但使用过滤器后端可以让您更轻松地将此限制添加到多个视图,或将其应用于整个 API

     
  • 相关阅读:
    常用256安全色
    PHP获取中英文混合字符串的字数
    windows 2012 443端口无法访问解决随记!
    SQL提取时间段内数据
    正则表达式匹配
    PclZip library能够压缩与解压缩Zip格式
    安装IIS或证书上服务提示安装程序无法复制文件 ftpsvc2.dl的解决办法
    tomcat
    版本控制gitlab
    rsync
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/14858208.html
Copyright © 2020-2023  润新知