Как получить каждый столбец как один список из Django QuerySet через DRF

Используя 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 результат в одну сторону, а затем перебрать результат снова, чтобы реструктурировать его.

2 ответа

вы можете использовать values_list, чтобы получить одно поле в формате списка, а затем использовать аннотацию. хотя я не пробовал

          data = MyModel.objects.values_list('field1',flat=true)

Если вы используете PostgreSQL, вы можете использовать трей:

массивагг

Другие вопросы по тегам