首页 > 解决方案 > Django Rest Framework 组和计数 POST

问题描述

我是DRF的新手,正在尝试创建某种动态序列化程序来计算发布的对象,但我不知道该怎么做。

模型.py

class Company(TimeStampedModel):
    name = models.CharField(max_length=200, blank=True)
    description = models.TextField(blank=True)
    date_founded = models.DateField(null=True, blank=True)
    
    def get_year (self):
        return self.date_founded.strftime("%Y")


    def get_quarter (self):
        x = self.date_founded
        if int(x.strftime("%m")) <= 3:
            return '1'
        elif int(x.strftime("%m")) <= 6 and int(x.strftime("%m")) > 3:
            return '2'
        elif int(x.strftime("%m")) <= 9 and int(x.strftime("%m")) > 6:
            return '3'
        else:
            return '4'

    def __unicode__(self):
        return u'{0}'.format(self.name)

序列化程序.py

class StatsSerializer(serializers.ModelSerializer):
    year = serializers.DateField(source='get_year')
    quarter = serializers.CharField(source='get_quarter')
    # total = serializers.SerializerMethodField()
   
    class Meta:
        model = Company
        fields = ['year', 'quarter', #'total']

视图.py

class CompanyStatsView(generics.ListCreateAPIView):
    queryset = Company.objects.all()
    serializer_class = StatsSerializer

到目前为止,我的结果是:

[
    {
        "year": "2018",
        "quarter": "2"
    },
    {
        "year": "2018",
        "quarter": "2"
    },
    {
        "year": "2018",
        "quarter": "2"
    },
    {
        "year": "2018",
        "quarter": "2"
    },
    {
        "year": "2018",
        "quarter": "3"
    },
    {
        "year": "2018",
        "quarter": "3"
    },
 ]

但是我正在寻找这样的东西:

[
    {
        "year": "2018",
        "quarter": "2"
        "total": 4
    },
    {
        "year": "2018",
        "quarter": "3"
        "total": 2
    },
]

如何对这些值进行分组和计数?任何帮助深表感谢!

标签: pythondjangodjango-rest-framework

解决方案


您想要的结果不是类似 REST 的端点。

请参阅https://docs.djangoproject.com/en/3.1/topics/db/aggregation/#values以了解如何在 Django 中构建 GROUP BY 查询。

请参阅https://docs.djangoproject.com/en/3.1/ref/models/database-functions/#extract以了解如何在数据库中按年份和季度进行分组。

最后你需要构建一个端点,请参阅Django Restframework: What view to use for statistics summary of queryset?这看起来像是您的问题的重复。


推荐阅读