Лучший способ создания пользовательского представления и вывода сериализатора, группирующего результаты на основе фильтра по предваряющему ключу
Я делаю некоторую работу вокруг фреймворка Django rest, чтобы получить пользовательский вывод, который соответствует графикам, которые я использую.
Но я пытаюсь понять, как я могу сгруппировать сериализатор по категориям, которые являются ключевым полем. Я не знаю, было бы неплохо использовать фильтры в get_query, или есть лучшее решение, так как категорий много.
Вот что я сделал на данный момент:
мои модели:
class Category(models.Model):
name = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True)
class Asset(models.Model):
category = models.ForeignKey(Category, related_name='categories', on_delete=models.CASCADE)
ticker = models.CharField(max_length=255, unique=True)
class PortfolioAsset(models.Model):
asset = models.ForeignKey(Asset, on_delete=models.CASCADE)
total_today_brl = models.FloatField()
Вот сериализатор:
class PortfolioAssetSerializer(serializers.ModelSerializer):
category = serializers.CharField(source='asset.category.name')
x = serializers.CharField(source='ticker')
y = serializers.FloatField(source='total_cost_brl')
class Meta:
model = models.PortfolioAsset
fields = (
'category',
'x',
'y',
)
А вот вид:
class PortfolioAssetList(generics.ListAPIView):
serializer_class = serializers.PortfolioAssetSerializer
def get_queryset(self):
return models.PortfolioAsset.objects.all()
# return models.PortfolioAsset.objects.filter(asset__category__name="Fundos Imobiliários")
def list(self, request, *args, **kwargs):
response = super(PortfolioAssetList, self).list(request, *args, **kwargs)
response.data = {
"name": "category",
"data": response.data
}
return response
Вывод, который я смог получить с помощью этого кода, был следующим:
{
"name": "category",
"data": [
{
"category": "category 1",
"x": "ASSET1",
"y": 10373.4
},
{
"category": "category 2",
"x": "ASSET2",
"y": 10996.3
},
{
"category": "Category 2",
"x": "ASSET3",
"y": 13022.28
},
]
}
Но вывод, которого я пытаюсь достичь, следующий:
{
"name": 'Category 1',
"data": [
{
"x": "ASSET1",
"y": 10373.4
},
]
},
{
"name": "Category 2",
"data": [
{
"x": "ASSET2",
"y": 10996.3
},
{
"x": "ASSET3",
"y": 13022.28
},
]
}