Python Django QuerySet按反向外键匹配数排序
我有以下Django型号:Python Django QuerySet按反向外键匹配数排序,python,django,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) 我希望返回一个Foo对象列表,这些对象与值列表中
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
对象列表,这些对象与值列表中包含eg\u id
值的Bar
对象具有反向关系。因此,我:
id_list = [7, 8, 9, 10]
qs = Foo.objects.filter(bar__eg_id__in=id_list)
如何根据id\u列表中具有eg\u id
值的相关Bar
对象的数量对匹配的Foo
对象进行排序
你可以通过使用,更具体地说,和
在您的示例中,它将是:
from django.db.models import Count
id_list = [7, 8, 9, 10]
qs = Foo.objects.filter(bar__eg_id__in=id_list)
qs = qs.annotate(count=Count("bar"))
qs = qs.order_by('-count')
谢谢直到最近才从Django 1.0升级,所以聚合功能对我来说还是相当新的。我试图将过滤器作为属性添加到我的“Foo”模型对象中。即使我导入了“Bar”模型,django shell仍表示Count(“Bar”)中的“Bar”未被识别。为什么它在my view.py中工作,而在my model.py中不工作?谢谢
from django.db.models import Count
id_list = [7, 8, 9, 10]
qs = Foo.objects.filter(bar__eg_id__in=id_list)
qs = qs.annotate(count=Count("bar"))
qs = qs.order_by('-count')