Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否在Django Rest框架(DRF)中过滤代码示例优化问题_Django_Optimization_Django Rest Framework_Filtering_Django Orm - Fatal编程技术网

是否在Django Rest框架(DRF)中过滤代码示例优化问题

是否在Django Rest框架(DRF)中过滤代码示例优化问题,django,optimization,django-rest-framework,filtering,django-orm,Django,Optimization,Django Rest Framework,Filtering,Django Orm,最近,我在DRF文档中提出了以下代码,用于在APIListView中过滤查询集 class PurchaseList(generics.ListAPIView): serializer_class = PurchaseSerializer def get_queryset(self): """ Optionally restricts the returned purchases to a given user, by filte

最近,我在DRF文档中提出了以下代码,用于在APIListView中过滤查询集

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', None)
        if username is not None:
            queryset = queryset.filter(purchaser__username=username)
        return queryset
看起来如果上面的代码片段按如下方式编写,效率会更高

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 = None
        username = self.request.query_params.get('username', None)
        if username is not None:
            queryset = queryset.filter(purchaser__username=username)
        else:
            queryset = Purchase.objects.all()
        return queryset

我错了吗?还是我错过了关于Django ORM的东西

只要不计算查询集,就没有数据库活动

回答这个问题:不,第二个代码示例实际上并不更有效

例如:

qs=Model.objects.all无数据库活动 qs=qs.filter**some_filter仍然没有活动 正在提取listqs数据 qs=qs.过滤器**其他过滤器无新活动 再次列出新活动
另请参见。

只要查询集未被评估,就没有数据库活动

回答这个问题:不,第二个代码示例实际上并不更有效

例如:

qs=Model.objects.all无数据库活动 qs=qs.filter**some_filter仍然没有活动 正在提取listqs数据 qs=qs.过滤器**其他过滤器无新活动 再次列出新活动 另见