如何通过DRF从Django QuerySet中获取每个列作为一个列表



使用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

相关内容

  • 没有找到相关文章

最新更新