查询顶级用户Django

时间:2013-04-03 21:22:13

标签: django django-queryset annotate

我必须创建一个算法,以获取我网站上最受欢迎的用户。 我真的不知道如何开始。 我必须考虑到: - 追随者数量 - 发布的评论/主题数量 - 用户收到的肯定投票数 - 团体会员数

我试过这样的事情:

 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 ...

由于

0 个答案:

没有答案