我必须创建一个算法,以获取我网站上最受欢迎的用户。 我真的不知道如何开始。 我必须考虑到: - 追随者数量 - 发布的评论/主题数量 - 用户收到的肯定投票数 - 团体会员数
我试过这样的事情:
UserProfile.objects.annotate(num_topic=Count('topic')).order_by('-num_topic')
这给了我最多主题排序的userProfile列表,但我不知道如何将它们组合在一起。
comment / topic / group / likeComment是具有用户外键的表。 Follower / Following是一个名为relationship的表的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 ...
由于