使用Django-REST-framework,我有以下视图:
class MyRESTfulAPIView(APIView):
permission_classes = [IsAuthenticated, MyCustomPermision]
def get(self, request):
data = MyModel.objects.values('field1').annotate(field2=..., field3=...)
return Response(data)
返回形状为:
的JSON[
{'field1': Result1.field1, 'field2': Result1.field2, 'field3': Result1.field3},
{'field1': Result2.field1, 'field2': Result2.field2, 'field3': Result2.field3},
...
]
是否有一种方法可以将每个列作为值的列表,像这样:
{
'field1': [Result1.field1, Result2.field1, ...],
'field2': [Result1.field2, Result2.field2, ...],
'field3': [Result1.field3, Result2.field3, ...],
}
JSON的确切形状并不重要,只需获取每个"列"即可。(模型字段)作为所有值的一个列表,而不是每行作为一个字典。(因为数据随后被传递到期望数据位于单独列表中的库)
显然,我可以只是解包QuerySet和重构它与Python(例如在那个答案),但我正在寻找某种方式告诉Django或DRF构建JSON像在第一个地方,而不是让Django和DRF构建的结果一种方式,然后迭代的结果再次重构它。
您可以使用values_list获取列表格式的单个字段,然后使用annotate。我没试过
data = MyModel.objects.values_list('field1',flat=true)
如果你使用PostgreSQL,你可以选择:
arrayagg