假设我有一个与Tag模型有多对多关系的Image模型。
给定一个图像,找到所有图像的最佳方法是什么,所述图像与所述图像共有多于x个标签,并且按照共同的标签数量排序?
例如,如果我的图片带有标签sand, beach, house, water, sea
我想找到让我们说出所有至少有2个这些标签的图像,然后根据它们有多少来排序。 (基本上是使用相同数量的标签来定义相似性的类似图像函数的实现)
如果可能的话,在这里寻找一个优化的解决方案,使用Django的orm
答案 0 :(得分:2)
这应该做的工作:
img = Image.objects.first()
Image.objects.filter(tags__in=img.tags.all()).\
annotate(num_common_tags=Count('pk')).order_by('-num_common_tags')
# To filter out Images with < 2 common tags
Image.objects.filter(tags__in=img.tags.all()).\
annotate(num_common_tags=Count('pk')).filter(num_common_tags__gt=2).\
order_by('-num_common_tags')