我有一个包含以下值的简单表
"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')
答案 0 :(得分:1)
您可以使用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
。