1

サイトで最も人気のあるユーザーを獲得するアルゴリズムを作成する必要があります。どうやって始めたらいいのかわからない。考慮しなければならないこと: - フォロワーの数 - 投稿されたコメント/トピックの数 - ユーザーが受け取った肯定的な投票の数 - グループメンバーシップの数

私はこのようなことを試しました:

 UserProfile.objects.annotate(num_topic=Count('topic')).order_by('-num_topic')

これにより、最もトピック順に並べられた userProfile のリストが表示されますが、それらすべてを組み合わせる方法がわかりません。

comment / topic / group / likeComment は、ユーザーへの外部キーを持つテーブルです。フォロワー / フォローは、リレーションシップという名前のテーブルを介した ManyToManyField です。

どんな助けでも大歓迎です

これまでのところ、私はここにいます:

topUsers = UserProfile.objects.annotate(num_topic=Count('topic',    distinct=True)).annotate(num_comment=Count('comment', distinct=True))

for user in topUsers:
    user.positive_votes = LikeComment.objects.filter(Q(type = 1), Q(comment__user=user) |  Q(topic__user=user) ).count()
    user.negaive_votes = LikeComment.objects.filter(Q(type = 0), Q(comment__user=user) |  Q(topic__user=user) ).count()

    user.num_group = GroupUser.objects.filter(user = user, status=1).count()
    user.num_followers = user.related_to.filter(from_people__status=1, from_people__to_person=user).count()
    user.num_followings = user.relationships.filter(to_people__status=1, to_people__from_person=user).count()

しかし、私がするとき

topUsers.order_by('-num_followers','-num_topic','-num_comment','-positive_vote','-num_group','-num_followings')

それはそれらを注文しません。

追加のフィールドを使用しようとしましたが、SQL で迷子になりました...

ありがとう

4

0 に答える 0