我正在尝试相当于“分组依据”,在测验所有者的测验中提取所有猜测的列表,按用户分组并注释用户已经进行了多少次猜测。
相关型号:
class Quiz(models.Model):
user = models.ForeignKey(User)
...
class Guess(models.Model):
user = models.ForeignKey(User)
quiz = models.ForegnKey(Quiz)
...
此查询:
guessors = Guess.objects.filter(quiz__user=request.user).values('user').annotate(cnt=Count('user')).order_by('cnt')
返回类似这样的东西,这非常接近我需要的东西:
{'cnt': 5, 'user': 5}
{'cnt': 3, 'user': 4}
{'cnt': 2, 'user': 3}
{'cnt': 1, 'user': 2}
但请注意,当我想要的是一个完整的User对象时,'user'作为int返回。有关如何最有效地获取完整User对象的任何建议吗?
答案 0 :(得分:4)
在我与Django的短暂但激烈的时间里,我发现group_by函数是我最想念的SQL功能之一。我已经尝试了你上面使用的values()聚合方法,但是我想要一个返回的对象有同样的问题。我最终使用raw SQL,这不是很漂亮但是为我需要的东西工作。
答案 1 :(得分:1)
一种选择是尝试使用双下划线表示法获取所有用户字段,例如,您可以执行类似值('user_ username','user _someOtherField')的操作。我不确定是否可以获得整个用户对象,其他人可能会对此有更多的帮助。