我有一个具有以下值的简单表

 "uid": "some_uid",
 "name": "test1",
 "trig_time": 1234, #unix timestamp
 "notify_time": 1235  #unix timestamp


我有很多元组,名字可能相同也可能不同。我打算根据名称对结果进行分组,并没有计数和作为结果返回的最新trig_time。例如,对于以下元组

name,trig_time,notify_time
test1,1234,1235
test1,1236,1237
test2,1238,1239


预期结果

name,count,latest_trig_time
test1,2,1236
test2,1,1238


我尝试了以下查询。我不确定我在做什么错。

queryset = Trig.objects.filter(uid=uid).annotate(count=Count('name')).order_by('name')


根据评论,
我正在使用Djangorestframework,以下是我的模型

class Trig(models.Model):
    uid = models.CharField(max_length=100, blank=False)
    name = models.CharField(max_length=100, blank=False)
    trig_time = models.BigIntegerField(blank=False)
    notify_time = models.BigIntegerField(default=0)

    class Meta:
        unique_together = ('name', 'uid', 'trig_time')


我还必须更改序列化程序代码吗?我在django shell中执行了查询,并且工作正常。但是在服务器上,出现以下错误


  序列化程序字段的名称可能不正确,不匹配任何
  dict实例上的属性或键。


以下是我的序列化器代码

class TrigSerializer(serializers.ModelSerializer):
    class Meta:
        model = Trig
        fields = ('uid','name','trig_time','notify_time')

最佳答案

您可以使用aggregation with values()到达那里:

from django.db.models import Count, Max

Trig.objects.filter(uid=uid).values('name')\
                    .annotate(count=Count('id'), latest_trig=Max(trig_time))\
                    .order_by()


(有关为什么需要最后一个空order_by()的信息,请参阅文档)。

这将为您提供每个name项目的计数,以及每个组的最新trig_time

09-09 17:02