Django QuerySet按反向ForeignKey匹配数排序
我有以下的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)
我想要返回一个包含Foo
对象的列表,这些Foo
对象和Bar
对象之间有反向关系,而这些Bar
对象的eg_id
值要在一个值的列表中。所以我有:
id_list = [7, 8, 9, 10]
qs = Foo.objects.filter(bar__eg_id__in=id_list)
我该如何根据相关的Bar
对象的数量来对匹配的Foo
对象进行排序,这些Bar
对象的eg_id
值在id_list
中呢?
2 个回答
23
使用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')