使用 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>)
因为 django-3.2 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')
假设我在 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>)
因为 django-3.2 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')