Как получить каждый столбец как один список из 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, вы можете использовать трей: