Python Django复序

Python Django复序,python,django,orm,Python,Django,Orm,我有一个Django模型文档,它可以有投票对象指向它。Vote上有一个名为score的整数字段 我想根据指向文档的Vote对象(得分为1的对象)的数量来订购文档查询集。i、 例如,拥有最多赞成票的文档应该是查询集中的第一个文档 Django有可能吗?如何操作?这是一项注释作业 from django.db.models import Count Document.objects.filter(score=1).annotate( positive_votes=Count

我有一个Django模型
文档
,它可以有
投票
对象指向它。
Vote
上有一个名为
score
的整数字段

我想根据指向文档的
Vote
对象(得分为1的对象)的数量来订购文档查询集。i、 例如,拥有最多赞成票的文档应该是查询集中的第一个文档


Django有可能吗?如何操作?

这是一项注释作业

from django.db.models import Count
Document.objects.filter(score=1).annotate(
             positive_votes=Count('vote__count')).order_by('positive_votes')
编辑

没有过滤就没有办法做到这一点,因为这是底层数据库操作的工作方式。但一种不太好的方法是对原始文档中未包含的所有文档进行单独查询,并将两个查询集链接在一起:

positive_docs = <query from above>
other_docs = Document.objects.exclude(id__in=positive_docs)
all_docs = itertools.chain(positive_docs, other_docs)
positive\u docs=
其他文档=Document.objects.exclude(id\uuu in=肯定文档)
所有文档=itertools.chain(正文档、其他文档)
只要没有数以百万计的文档,这就可以工作,但会破坏分页等功能。

我这样做了(在
QuerySet
模型上):


优点是它仍然显示没有正面评级的文档。

我想你的意思是
score=1
?@DanielRoseman正确,已修复。这很有意义,但我们可以在不过滤
文档
对象的情况下执行此操作吗?我还想看没有投票权的文件。请看漂亮的,上面有糖吗?
def order_by_score(self):
    q = django.db.models.Q(ratings__score=1)
    documents_with_one_positive_rating = self.filter(q) # Annotation sees only
                                                        # the positive ratings
    documents_without_one_positive_rating = self.filter(~q)

    return (documents_with_one_positive_rating |
            documents_without_one_positive_rating).annotate(
                db_score=django.db.models.Count('ratings')
                ).order_by('-db_score')