Python Django计数将查询与contains匹配
我想按顺序(作为排名)显示与登录用户有更多共同点的用户。 我有以下代码:Python Django计数将查询与contains匹配,python,django,django-views,Python,Django,Django Views,我想按顺序(作为排名)显示与登录用户有更多共同点的用户。 我有以下代码: 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
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
我想这样:
Username A
Username B
Username A
Username B
Username B
Username C
Username B
Username A
Username C
因为用户“B”与“我”有更多的共同点
有人知道我怎么做吗
谢谢您可以使用该课程:
或者,使用并让数据库完成以下工作:
User.objects.filter(likes__icontains=keyword)
.exclude(id=sesion)
.annotate(total_likes=Count('likes'))
.order_by('total_likes')
为了论证起见,我们假设您不可能制作另一个模型 那么你能做的就是:
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')
这将把查询集的计算结果保存在一个中,用于您拥有的每个关键字。
当您在用户周围执行[]
时,您正在评估查询集。对象…
无法通过全文搜索完成此操作。。。你唯一的选择是用python对列表进行重新排序……如果你制作了一个Like
模型,并从User
链接成一个M2M字段,那么“Like”是关键字,类似于标记。Like是“tags”,它们在一个字段中,类似这样:“Food,python,developer,Other,Other,etc…”