首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django计数与包含匹配查询

Django计数与包含匹配查询
EN

Stack Overflow用户
提问于 2013-05-22 18:34:15
回答 2查看 703关注 0票数 1

我想按顺序(作为排名)显示与登录用户有更多共同点的用户。我有这样的代码:

代码语言:javascript
运行
复制
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))

但这段代码显示的内容如下所示:

代码语言:javascript
运行
复制
Username A
Username B
Username A
Username B
Username B
Username C

我希望是这样的:

代码语言:javascript
运行
复制
Username B
Username A
Username C

因为用户"B“和”我“有更多的共同点。

有人知道我是怎么做到的吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-22 18:41:51

您可以使用Counter类:

代码语言:javascript
运行
复制
>>> Counter(result).most_common()
[('b', 3), ('a', 2), ('c', 1)]

或者,使用Count并让数据库来做这些事情:

代码语言:javascript
运行
复制
User.objects.filter(likes__icontains=keyword)
            .exclude(id=sesion)
            .annotate(total_likes=Count('likes'))
            .order_by('total_likes')
票数 2
EN

Stack Overflow用户

发布于 2013-05-22 18:46:56

为了论证起见,让我们说你不可能建立另一个模型。

然后你可以做的是:

代码语言:javascript
运行
复制
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...执行[]时,您正在计算查询集

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16689542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档