Django агрегация данных
Вид данных в таблице.
id title sub_id sub_title
1 "test1" 11 "test4"
1 "test1" 22 "test4"
1 "test1" 33 "test4"
2 "test2" 44 "test5"
2 "test2" 55 "test5"
2 "test2" 66 "test5"
3 "test3" 77 "test6"
3 "test3" 88 "test6"
3 "test3" 99 "test6"
файл model.py
class testmodel(models.Model):
id = models.IntegerField(primary_key=True, blank=True, null=True)
title = models.TextField(blank=True, null=True)
sub_id = models.IntegerField(blank=True, null=True)
sub_title = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'test_table'
файл serializer.py
class TestSerializer(serializers.ModelSerializer):
class Meta:
model = testtable
fields = [
'id',
'title',
'sub_id',
'sub_title',
]
файл view.py
class TestView(generics.ListAPIView):
serializer_class = TestSerializer
def get_queryset(self):
queryset = testtable.objects.all()
return queryset
в текущем варианте файла view.py данные выводяться в следующем образе.
[
{
"id": 1,
"title": "test1",
"sub_id": 11,
"sub_title": "test4"
},
{
"id": 1,
"title": "test1",
"sub_id": 22,
"sub_title": "test4"
},
{
"id": 1,
"title": "test1",
"sub_id": 33,
"sub_title": "test4"
},
{
"id": 2,
"title": "test2",
"sub_id": 44,
"sub_title": "test5"
},
{
"id": 2,
"title": "test2",
"sub_id": 55,
"sub_title": "test5"
},
]
А результате нужно добавить ещё одно поле, и сгрупировать по нему все sub_id у которых id одинаковые и на выходе получить следующие данные. проблема в том, что у меня даже нет предположений как это сделать
[
{
"id": 1,
"title": "test1",
'sub_elements': [
{
"sub_id": 11,
"sub_title": "test4"
},
{
"sub_id": 22,
"sub_title": "test4"
},
{
"sub_id": 33,
"sub_title": "test4"
},
]
},
{
"id": 2,
"title": "test2",
'sub_elements':[
{
"sub_id": 44,
"sub_title": "test5"
},
{
"sub_id": 55,
"sub_title": "test5"
},
# and so on
]
},
]