Как сериализовать агрегированную запись в Django rest framework?

модель


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__'

Мне нужно сгруппировать по одному или нескольким столбцам: дата, канал, страна, операционная система и сериализовать это. Может ли кто-нибудь помочь мне, как я могу это сделать?

вы должны определить новое поле в сериализаторе:

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=...)
    ...
Вернуться на верх