我有一个名为Evaluation的模型,具有以下模式:
user = models.ForeignKey(User)
value = models.IntegerField()
值字段将取值为0,1,2,3。
现在我想得到每个值对给定用户的评估计数。例如,假设我的数据是:
user.id | value
1 | 0
1 | 0
1 | 1
1 | 2
1 | 3
1 | 3
我想得到结果
value | count
0 | 2
1 | 1
2 | 1
3 | 2
我使用查询
Evaluation.objects.filter(user=request.user).annotate(count=Count('value')).order_by('value')
但它没有返回正确的答案。有人可以帮忙吗?
答案 0 :(得分:1)
添加values()
方法:
Evaluation.objects.filter(user_id=request.user) \
.values('value').annotate(count=Count('value')) \
.order_by('value')
答案 1 :(得分:1)
你可以这样做:
Evaluation.objects.filter(user=request.user).values('value').annotate(count=Count('value')).order_by('value')
答案 2 :(得分:0)
您可以构建反向查询并查询User
模型:
User.objects.filter(user=request.user).values('evaluation__value').annotate(count=Count('evaluation__user'))
将产生以下结果:
[{'count': 1, 'evaluation__value': 1}, {'count': 1, 'evaluation__value': 2}, {'count': 2, 'evaluation__value': 0}, {'count': 2, 'evaluation__value': 3}]
此外,您可能希望对结果进行排序:
queryset.order_by('-count') # sorts by count desc
不幸的是,您无法在values
queryset方法中对该值进行别名,因此将丑陋的evaluation__value
作为字段名称。 See this Django ticket
HTH。