Django 按多对多关系排序

Django 按多对多关系排序,django,django-models,django-queryset,Django,Django Models,Django Queryset,在我的问题的简化版本中,我有一个模型文档,它与标记有一个manay-to-many关系。我想问一个问题,给定一个标签列表,将按照与标签匹配的顺序对文档进行排序,即首先显示与更多标签匹配的文档,然后显示与更少标签匹配的文档。我知道如何使用大型普通SQL查询来实现这一点,但在使用QuerySet时遇到了困难。有人能帮忙吗 class Document(model.Model): title = CharField(max_length = 20) content = TextFie

在我的问题的简化版本中,我有一个模型文档,它与标记有一个manay-to-many关系。我想问一个问题,给定一个标签列表,将按照与标签匹配的顺序对文档进行排序,即首先显示与更多标签匹配的文档,然后显示与更少标签匹配的文档。我知道如何使用大型普通SQL查询来实现这一点,但在使用QuerySet时遇到了困难。有人能帮忙吗

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”的文档,然后是只匹配其中一个的文档,最后是不匹配任何一个的文档

提前感谢您的帮助。

请查看以下内容:


一些文档:

这个例子和文档有帮助,但最后我不得不做两个查询。一个用于订购具有一个或多个请求的标记的文档,另一个用于订购没有任何标记的文档。我找不到用一个查询对所有文档进行排序的方法。