2016-07-22 39 views
1

做的GroupBy我有以下值在Django的ORM

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

我有很多可能會或可能不會有同樣的名字的元組的一個簡單的表格。我打算根據名稱對結果進行分組,並將計數no和最新的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') 
+1

您應該發佈Django模型代碼而不是數據庫表示 - 尤其是如果您想要使用ORM的答案。 – solarissmoke

回答

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的計數。

相關問題