使用 Django 中相关对象的数量对查询集进行排序

Order queryset using the number of related objects in Django

假设我在 models.py 中有以下内容:

class A(models.Model):
    ...

class B(models.Model):
    a = models.ForeignKey(A, on_delete=models.CASCADE)

我想做的是根据 B 个对象的数量降序对 A 的查询集进行排序。解决这个问题的最佳方法是什么?感谢您的帮助。

您可以使用 .annotate(…) [Django-doc] and then .order_by(…) [Django-doc]:

from django.db.models import Count

A.objects.annotate(
    <b>nb=Count('b')</b>
).order_by(<b>'-nb'</b>)

因为 you can work with .alias(…) [Django-doc] 以防止在列和 ORDER BY 子句中计算它:

from django.db.models import A

A.objects.<b>alias</b>(
    <b>nb=Count('b')</b>
<b>)</b>.order_by('-nb')

这是:

queryset = A.objects.filter().order_by('B_A')

这里'B_A'你必须把相关的名字

class A(models.Model):
    ...

class B(models.Model):
    a = models.ForeignKey(A, on_delete=models.CASCADE, related_name = 'B_A')