Лучший способ создания пользовательского представления и вывода сериализатора, группирующего результаты на основе фильтра по предваряющему ключу

Я делаю некоторую работу вокруг фреймворка 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
            },
           ]
         }
Вернуться на верх