Serialization Django Rest框架返回单个值

Serialization Django Rest框架返回单个值,serialization,django-rest-framework,aggregate,Serialization,Django Rest Framework,Aggregate,如果我有一个如下的模型,我将如何返回数据库中的总英里数?如果我使用聚合函数,那么它将工作,但它将遍历所有对象,并给出这些对象旁边的总数 型号.py from django.db import models class Rec(models.Model): name = models.CharField(max_length=50) miles = models.IntegerField() class SummarySerializer(serializers.Seriali

如果我有一个如下的模型,我将如何返回数据库中的总英里数?如果我使用聚合函数,那么它将工作,但它将遍历所有对象,并给出这些对象旁边的总数

型号.py

from django.db import models

class Rec(models.Model):
    name = models.CharField(max_length=50)
    miles = models.IntegerField()
class SummarySerializer(serializers.Serializer):
    total_miles = serializers.SerializerMethodField()

    def get_total_miles(self, obj):
        return Rec.objects.filter(name=obj.name).aggregate(Sum('miles'))
class SummaryViewSet(viewsets.ModelViewSet):
    serializer_class = SummarySerializer
    queryset = Rec.objects.all()
序列化程序.py

from django.db import models

class Rec(models.Model):
    name = models.CharField(max_length=50)
    miles = models.IntegerField()
class SummarySerializer(serializers.Serializer):
    total_miles = serializers.SerializerMethodField()

    def get_total_miles(self, obj):
        return Rec.objects.filter(name=obj.name).aggregate(Sum('miles'))
class SummaryViewSet(viewsets.ModelViewSet):
    serializer_class = SummarySerializer
    queryset = Rec.objects.all()
视图.py

from django.db import models

class Rec(models.Model):
    name = models.CharField(max_length=50)
    miles = models.IntegerField()
class SummarySerializer(serializers.Serializer):
    total_miles = serializers.SerializerMethodField()

    def get_total_miles(self, obj):
        return Rec.objects.filter(name=obj.name).aggregate(Sum('miles'))
class SummaryViewSet(viewsets.ModelViewSet):
    serializer_class = SummarySerializer
    queryset = Rec.objects.all()
电流输出

[{'total':1000, 'total':1000, 'total':1000.... etc}]
所需输出(值的一个实例)


Django aggregate返回一个dict(),在聚合数据时,应该向其中添加一个键,然后将该键吐出

 def get_total_miles(self, obj):
        return Rec.objects.filter(name=obj.name).aggregate(sum_miles=Sum('miles'))['sum_miles']

聚合的错误是什么?对不起。。。使用了太多的代码示例-没有错误,它只会对数据库中的每个对象重复相同的信息:[{total:1000,total:1000,total:1000…etc}]。我更新了原来的帖子来反映这一点。这很有效,谢谢!我最终将这个逻辑移动到视图中,这样我就可以访问传入的请求对象(用于参数),所以我的所有逻辑都包含在视图文件中。这是最佳做法吗?此外,我对你的答案投了赞成票,但没有足够的声誉来证明:)我是这样做的,在文档中有一些例子使用它,我认为这是定义关键字的正确方法,因为django自己添加了keywods,如果关键字太长,它的代码也不会很漂亮