我有一个这样的PlayTrack模型,每次user
播放track
时,这意味着PlayTrack
中有1条记录
class PlayTrack(models.Model):
track = models.ForeignKey(Track, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
token = models.CharField(max_length=255, default='default_token')
那么,如何查询每个用户的播放次数?
我尝试过PlayTrack.objects.annotate(Count('user'), Count('track')).values('user', 'track__count')
,但它给了我类似
<QuerySet [{'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, {'user': 2, 'track__count': 1}, '...(remaining elements truncated)...']>
我需要的是类似的东西
{'user': 2, 'track__count': 3},{'user': 3, 'track__count': 5},{'user': 4, 'track__count': 10},
答案 0 :(得分:2)
尝试一下,
from django.db.models import Count
PlayTrack.objects.values('user').annotate(count=Count('id'))
这类似于 SELECT user,COUNT(id) from PlayTrack GROUP BY user
SQL查询。通过此查询,您将获得所有按用户分组的PlayTrack信息
------------------------------------------ -------------------------------------------------- -----------------------------------------
我有第二个想法,track__count
正在计算track
的数量。因此,我假设您需要将结果获取为 SELECT user,COUNT(track) from PlayTrack GROUP BY user
,这可能是
from django.db.models import Count
PlayTrack.objects.values('user').annotate(count=Count('track'))