Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django QuerySet按反向外键匹配数排序_Python_Django - Fatal编程技术网

Python Django QuerySet按反向外键匹配数排序

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对象列表,这些对象与值列表中

我有以下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
对象列表,这些对象与值列表中包含
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')