python - 在 Django 中按 ManyToManyField 对 QuerySet 进行排序
问题描述
我有一个这样的模型:
class my_model(models.Model)
foo = models.ManyToManyField(My_other_model)
我想获取my_model
按 foo 字段中的对象数量排序的所有对象。在这个问题中,来自俄罗斯的一个友好的家伙说,你应该使用 django-annontation。我尝试了以下方法:
my_model.objects.all().order_by("-foo")
它工作正常。有什么理由我应该用注释走更长的路吗?感谢您的帮助并保持健康!
解决方案
从文档中,您的用例可以只使用.order_by()
. 对于更复杂的查询,您将使用.annotate()
如下:
below_5 = Count('book', filter=Q(book__rating__lte=5))
pubs = Publisher.objects.annotate(below_5=below_5)
您还可以像这样进行多个注释:
below_5 = Count('book', filter=Q(book__rating__lte=5))
above_5 = Count('book', filter=Q(book__rating__gte=5))
pubs = Publisher.objects.annotate(below_5=below_5).annotate(above_5=above_5)