Python 排序序列化数据-Django-获取密钥错误
版本信息:Python 排序序列化数据-Django-获取密钥错误,python,django,Python,Django,版本信息: Django: 1.11.2 Python 2.7 在我的应用程序中,我希望按照序列化程序返回的数据中的字段进行排序,但是,它抛出了一个错误 结果集的类型为rest\u framework.utils.serializer\u helpers.ReturnList,下面给出了数据(仅示例,实际数据非常庞大) 我得到的错误是(KeyError('price',),'price') 在views.py中,我使用此代码按价格排序 sorted(business_serializer.da
Django: 1.11.2
Python 2.7
在我的应用程序中,我希望按照序列化程序返回的数据中的字段进行排序,但是,它抛出了一个错误
结果集的类型为rest\u framework.utils.serializer\u helpers.ReturnList
,下面给出了数据(仅示例,实际数据非常庞大)
我得到的错误是(KeyError('price',),'price')
在views.py中,我使用此代码按价格排序
sorted(business_serializer.data, key=lambda k: (k['price']))
请指出我做错了什么。此外,我还想实现ASC/DESC功能
注意:我试图在序列化程序中实现order\u by
,因为我的数据有不同的类别&它们中的每一个都有一个价格,而不是在结果级别进行排序
编辑:编辑响应(添加了高级密钥),添加到行下方
由于价格在商务服务范围内,我试过了
sorted(business_serializer.data, key=lambda k: (k['business_service']['price']))
我得到了这个错误(TypeError('list index必须是整数,而不是str'),'list index必须是整数,而不是str')
另外,
sorted(business_serializer.data,key=lambda k:(-k['premium'])
的现有代码工作正常。您可以扩展模型的默认对象管理器。编写自定义对象管理器时,可以修改查询返回的查询集
这里的文档:根据您提供的数据示例,与
'business\u service'
相关的值是一个列表
,因此当您写入时,类型错误
:
sorted(business\u serializer.data,key=lambda k:(k['business\u service']['price']))
您需要访问k['business\u service']
返回的列表中的OrderedDict
,然后才能访问键'price'
因此这应该有效:
sorted(business_serializer.data,key=lambda k:(k['business_service'][0]['price']))
仅供参考:django 1.11和python 2.7都已经严重过时。这是一个现有的应用程序&我无法修改任何改变对象的内容,因为前端应用程序依赖于此数据。我有一种印象,即索引0不会在整个对象列表中循环,因此留下了它。然而,它奏效了。关于lambda的任何参考文献,大多数搜索都指向一些基本示例。
sorted(business_serializer.data, key=lambda k: (k['business_service']['price']))