zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    【26】多任务学习
    【25】迁移学习
    【24】定位数据不匹配
    【23】不匹配数据划分的偏差和方差;判断问题所在的几个重要参数
    【22】在不同的划分上进行训练和测试
    【21】进行误差分析
    17-----vue-cli脚手架安装和webpack-simple模板项目生成
    15-----修饰符
    14-----表单输入绑定
    12-----指令系统介绍
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/14858208.html
Copyright © 2011-2022 走看看