Как сериализовать агрегированную запись в 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=...)
...