在我的问题的简化版本中,我有一个模型文档,它与标签有很多关系。我想要一个查询,给定的标签列表将按照与标签匹配的顺序对文档进行排序,即首先显示匹配更多标签的文档,稍后显示匹配较少标签的文档。我知道如何使用大型纯 SQL 查询来做到这一点,但我很难让它与查询集一起使用。任何人都可以帮忙吗?
class Document(model.Model):
title = CharField(max_length = 20)
content = TextField()
class Tag(model.Model):
display_name = CharField(max_length = 10)
documents = ManyToManyField(Document, related_name = "tags")
我想做类似以下的事情:
documents = Documents.objects.all().order_by(count(tags__in = ["java", "python"]))
并首先获取同时匹配“java”和“python”的文档,然后获取仅匹配其中一个的文档,最后获取不匹配的文档。
在此先感谢您的帮助。