0

使用 Django-REST 框架,我有以下视图:

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 构建结果以一种方式,然后再次迭代结果以对其进行重构。

4

2 回答 2

0

您可以使用 values_list 获取列表格式的单个字段,然后使用注释。虽然我没试过

    data = MyModel.objects.values_list('field1',flat=true)
于 2021-01-19T05:17:57.510 回答
0

如果您使用 PostgreSQL,您可以托盘使用:

数组聚合

于 2021-12-27T14:22:39.317 回答