2015-12-01 32 views
0

我使用Django == 1.8.7,我有以下型號查詢GROUP_BY

# a model in users.py 
class User(models.Model): 
    id = models.AutoField(primary_key=True) 
    username = models.CharField(max_length=100, blank=True) 
    displayname = models.CharField(max_length=100, blank=True) 
    # other fields deleted 

# a model in healthrepo.py 
class Report(models.Model): 
    id = models.AutoField(primary_key=True) 
    uploaded_by = models.ForeignKey(User, related_name='uploads', 
            db_index=True) 
    owner = models.ForeignKey(User, related_name='reports', db_index=True) 
    # other fields like dateofreport, deleted 

我用下面的Django的查詢集:

Report.objects.filter(owner__id=1).values('uploaded_by__username', 
              'uploaded_by__displayname').annotate(
               total=Count('uploaded_by__username') 
             ) 

我看到這個生成以下查詢:

SELECT T3."username", T3."displayname", COUNT(T3."username") AS "total" FROM "healthrepo_report" 
INNER JOIN "users_user" T3 ON ("healthrepo_report"."uploaded_by_id" = T3."id") 
WHERE "healthrepo_report」.」owner_id" = 1 
GROUP BY T3."username", T3."displayname", "healthrepo_report"."dateofreport", "healthrepo_report」.」owner_id", "healthrepo_report"."uploaded_by_id" 
ORDER BY "healthrepo_report"."dateofreport" DESC, "healthrepo_report"."user_id" ASC, "healthrepo_report"."uploaded_by_id" ASC 

但是,我真正想要的只是基於「healthrepo_r eport「,」owner_id「,而不是多個字段。即我想要的是:

SELECT T3."username", T3."displayname", COUNT(T3."username") AS "total" FROM "healthrepo_report" 
INNER JOIN "users_user" T3 ON ("healthrepo_report"."uploaded_by_id" = T3."id") 
WHERE "healthrepo_report」.」owner_id" = 1 
GROUP BY T3."username", T3."displayname" ORDER BY "healthrepo_report"."dateofreport" DESC, "healthrepo_report"."user_id" ASC, "healthrepo_report"."uploaded_by_id" ASC 

我想知道爲什麼會發生這種情況,我如何得到基於單列的分組。

回答