Django QuerySet按反向ForeignKey匹配的数量排序

msa*_*ers 3 python django

我有以下Django模型:

class Foo(models.Model):
    title = models.CharField(_(u'Title'), max_length=600)

class Bar(models.Model):
    foo = models.ForeignKey(Foo)
    eg_id = models.PositiveIntegerField(_(u'Example ID'), default=0)
Run Code Online (Sandbox Code Playgroud)

我希望返回列表Foo它有一个反向关系的对象Bar是有对象eg_id包含在值列表值.所以我有:

id_list = [7, 8, 9, 10]
qs = Foo.objects.filter(bar__eg_id__in=id_list)
Run Code Online (Sandbox Code Playgroud)

如何Foo根据Bar具有eg_id值的相关对象的数量来对匹配对象进行排序id_list

Dan*_*man 13

使用Django可爱的聚合功能.

from django.db.models import Count
qs = Foo.objects.filter(
           bar__eg_id__in=id_list
      ).annotate(
           bar_count=Count('bar')
      ).order_by('bar_count')
Run Code Online (Sandbox Code Playgroud)