Django"group by"通过注释:从.value()获取对象与ID

mit*_*chf 5 django orm annotations group-by

我正在尝试相当于"分组依据",在测验所有者的测验中拉出所有猜测的列表,按用户分组并注释用户所做的猜测次数.

相关型号:

class Quiz(models.Model):  
    user = models.ForeignKey(User)
    ...

class Guess(models.Model):  
    user = models.ForeignKey(User)
    quiz = models.ForegnKey(Quiz)
    ...
Run Code Online (Sandbox Code Playgroud)

这个查询:

guessors = Guess.objects.filter(quiz__user=request.user).values('user').annotate(cnt=Count('user')).order_by('cnt')
Run Code Online (Sandbox Code Playgroud)

返回类似这样的东西,它非常接近我需要的东西:

{'cnt': 5, 'user': 5}
{'cnt': 3, 'user': 4}
{'cnt': 2, 'user': 3}
{'cnt': 1, 'user': 2}
Run Code Online (Sandbox Code Playgroud)

但请注意,当我想要的是一个完整的User对象时,'user'作为int返回.有关如何最有效地获取完整User对象的任何建议?

小智 4

在我使用 Django 的短暂而紧张的时间里,我发现 group_by 函数是我最怀念的 SQL 功能之一。我已经尝试了上面使用的 value() 聚合方法,但遇到了同样的问题,我想要返回一个对象。我最终使用了原始 SQL,它不太漂亮,但可以满足我的需要。