djangoでDBからobjectsとannotateとorder_byを使いQuerySetを取得
解決したいこと
WEBアプリを作成しています。
今回DBにあるカラム(follower)をデータの数順にソートしたいと思いコードを書きました。
しかし、データを思うようにソートできなかったので質問させてください。
models.py
class Follow(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='follow_owner')
following = models.IntegerField(null=True)
follower = models.IntegerField(null=True)
views.py
def reviewer_ranking(request):
rankingDataOrg = Follow.objects.annotate(total=Count(
'follower')).order_by('-total')[:15]
print(rankingDataOrg)
params = {
'rankingDataOrg': rankingDataOrg,
}
return render(request, 'movieist/reviewer_ranking.html', params)
このように書いてもカラム(follower)はランダムに出力されてしまいます。
そこで『values('follower')』を追加してみました。
views.py
def reviewer_ranking(request):
rankingDataOrg = Follow.objects.values('follower').annotate(total=Count(
'follower')).order_by('-total')[:15]
print(rankingDataOrg)
params = {
'rankingDataOrg': rankingDataOrg,
}
return render(request, 'movieist/reviewer_ranking.html', params)
QuerySet
<QuerySet [{'follower': 276, 'total': 13}, {'follower': 693, 'total': 12}, {'follower': 142, 'total': 12}, {'follower': 63, 'total': 11}, {'follower': 948, 'total': 11}, {'follower': 153, 'total': 10}, {'follower': 452, 'total': 10}, {'follower': 211, 'total': 10}, {'follower': 828, 'total': 10}, {'follower': 21, 'total': 10}, {'follower': 944, 'total': 10}, {'follower': 297, 'total': 9}, {'follower': 396, 'total': 9}, {'follower': 564, 'total': 9}, {'follower': 315, 'total': 9}]>
QuerySetのtotalをみていただいて分かるとおりカラム(follower)の数順にソートすることができました。
しかし、カラムは他にもあるのにfollower以外出力されません。
全てのカラムをfollowerの数順にソートしデータを得る方法が分かる方がお見えになればご教授いただけたらと思います。
至らない点も多々あるかと思いますがよろしくお願いします。
0