【问题标题】:How to serialize the Grouped record in Django rest framework?如何序列化Django rest框架中的分组记录?
【发布时间】:2021-10-23 22:50:43
【问题描述】:

型号


class Metric(models.Model):

    date = models.DateField()
    channel = models.CharField(max_length=50)
    country = models.CharField(max_length=10)
    os = models.CharField(max_length=10)
    impressions = models.IntegerField()
    clicks = models.IntegerField()    

    def __str__(self):
        return "{} - {}".format(self.date, self.channel)

我的看法

class MetricViewSet(viewsets.ModelViewSet):

    serializer_class = MetricSerializer
    queryset = Metric.objects.all()
    filter_backends = [DjangoFilterBackend]
    filterset_class = MetricFilter

我的序列化器

class MetricSerializer(serializers.ModelSerializer):
    class Meta:
        model = Metric
        fields = '__all__'

我需要按一列或多列分组:日期、频道、国家、操作系统并对其进行序列化。有人可以帮我解决一下吗?

select channel, country, sum(impressions) as impressions, sum(clicks) as clicks from sample dataset where date < '2017-06-01' group by channel, country order by clicks desc;
     channel      | country | impressions | clicks 
------------------+---------+-------------+--------
 adcolony         | US      |      532608 |  13089
 apple_search_ads | US      |      369993 |  11457
 vungle           | GB      |      266470 |   9430
 vungle           | US      |      266976 |   7937

【问题讨论】:

  • 很高兴看到您期望获得的汇总响应示例,以便更好地理解。 ModelViewSet 提供围绕Metric 模型的某些操作,并将假定输入/输出具有MetricSerializer 的架构。您可能需要使用自定义额外操作django-rest-framework.org/api-guide/viewsets/…
  • @rootart - 我已经在问题中添加了它

标签: python django django-models django-rest-framework django-serializer


【解决方案1】:

您应该在序列化程序中定义一个新字段:

class MetricSerializer(serializers.ModelSerializer):
    annotated_field = serializers.IntegerField()
    class Meta:
        model = Metric
        fields = [ 'annotated_field', 'other fields']

并更改视图上的查询集或您想要序列化数据的位置:

class MetricViewSet(viewsets.ModelViewSet):

    ...
    queryset = Metric.objects.annotate(annotated_field=...)
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多