我想按顺序(作为排名)显示与登录用户有更多共同点的用户。我有这样的代码:
me = User.objects.get(pk=sesion)
keywords = me.likes
result = []
for keyword in keywords.split(','):
result += list(User.objects.filter(likes__icontains=keyword).exclude(id=sesion))但这段代码显示的内容如下所示:
Username A
Username B
Username A
Username B
Username B
Username C我希望是这样的:
Username B
Username A
Username C因为用户"B“和”我“有更多的共同点。
有人知道我是怎么做到的吗?
谢谢
发布于 2013-05-22 18:41:51
您可以使用Counter类:
>>> Counter(result).most_common()
[('b', 3), ('a', 2), ('c', 1)]或者,使用Count并让数据库来做这些事情:
User.objects.filter(likes__icontains=keyword)
.exclude(id=sesion)
.annotate(total_likes=Count('likes'))
.order_by('total_likes')发布于 2013-05-22 18:46:56
为了论证起见,让我们说你不可能建立另一个模型。
然后你可以做的是:
keywords = [word.lower() for word in me.likes.split(',')]
result = User.objects.filter(likes__in=keywords)
.exclude(id=sesion)
.annotate(most_likes=Count('likes'))
.order_by('most_likes')这将为您拥有的每个关键字将查询集的评估保存在for中。当您围绕User.objects...执行[]时,您正在计算查询集
https://stackoverflow.com/questions/16689542
复制相似问题