Django通过子模型的计数(一对多关系)排序父模型

时间:2013-08-22 08:00:23

标签: django django-models django-queryset

假设我们有django模型ParentChildChild属于一个Parent,一个Parent可以有多个孩子。

class Parent(models.Model):
   pass

class Child(models.Model):
  parent = models.ForeignKey(Parent)

我想获得按孩子数量排序的所有父母的一套。

2 个答案:

答案 0 :(得分:8)

child_setrelated_name模型中parent字段的默认Child。如果您指定了另一个,则必须相应地更改代码。

from django.db.models import Count

ordered_parents = Parent.objects.annotate(num_children=Count('child_set')).order_by('-num_childen')

希望它有所帮助。

答案 1 :(得分:1)

阅读django docs中的aggregate函数 在任何情况下,您都可以执行parent_instance.child_set.count()来获取子项数 如果我没有弄错你可以过滤,也可以通过这种关系来命令。 这是reverse relations

的链接