values 与 values_list 的使用

quserSet = ChangeType.objects.filter(status=1).values('change_type')

quserSet = ChangeType.objects.filter(status=1).values_list('change_type')

values()返回包含字典的QuerySet:

<QuerySet [{'change_type': '后台变更'}, {'change_type': '网络变更'}, {'change_type': '系统变更'}, {'change_type': '基础设施变更'}]>

values_list返回包含元祖的queryset

<QuerySet [('后台变更',), ('网络变更',), ('系统变更',), ('基础设施变更',)]>

当使用values_list()单个字段时,可以增加:

flat = True
返回单个值的queryset,而不是一个元祖

quserSet = ChangeType.objects.filter(status=1).values_list('change_type', flat=True)

结果为:

<QuerySet ['后台变更', '网络变更', '系统变更', '基础设施变更']>

项目以前写法:

class ChangeTypeView(ModelViewSet):
    def get(self, request):
        quserSet = ChangeType.objects.filter(status=1)
        type_list = []
        for change_type in quserSet:
            type_list.append(change_type.change_type)
        return Response(apiResult('success', 2000, data=type_list))

现在改进为:

class ChangeTypeView(ModelViewSet):
    def get(self, request):
    	quserSet = ChangeType.objects.filter(status=1).values_list('change_type', flat=True)
        type_list = list(quserSet)
        return Response(apiResult('success', 2000, data=type_list))

使用values 和values_list 只取我们需要的数据 不用全部取出
示例中数据量小,当数据量非常大时 优化就很明显

posted @ 2020-07-28 14:29  oldlv  阅读(509)  评论(0)    收藏  举报