按多对多关系排序

时间:2013-08-09 12:55:17

标签: django django-models django-queryset

在我的问题的简化版本中,我有一个模型文档,它与Tag有许多关系。我想要一个查询,给定一个标签列表将按照它们与标签匹配的顺序对文档进行排序,即首先显示匹配更多标签的文档,然后显示匹配较少标签的文档。我知道如何使用大型纯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",然后是只匹配其中一个的文档,最后是不匹配的文档。

提前感谢您的帮助。