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 只取我们需要的数据 不用全部取出
示例中数据量小,当数据量非常大时 优化就很明显

浙公网安备 33010602011771号