Django QuerySet“基于行”聚合

时间:2013-06-02 00:55:10

标签: django-models django-queryset django-orm

我有一个模型Foo,它与模型Bar和模型Baz有m2m关系,所以看起来有点像这样:

Bar(0..*)----(1..*)Foo(1..*)----(0..*)Baz

我正在尝试做的是通过相关联的条形和Baz数量来获得前n个Foos。

这是我到目前为止所得到的:

Foo.objects.all() \
    .annotate(count_bar=(Count('bar')) \
    .annotate(count_baz=(Count('baz').extra(
        'select'={'total' : 'count_bar + count_baz'},
        'order_by'=('-total',)
    )

QuerySet看起来很好,直到extra调用。然后我得到Unable to get repr for QuerySet 如果F()可以在annotate调用中使用,那么这将是一件轻而易举的事。我有什么ORM友好的方式吗?

1 个答案:

答案 0 :(得分:0)

检索所有带有计数的食物,并使用lambda作为关键字用sorted对它们进行排序。