首页 > 解决方案 > 在 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")

它工作正常。有什么理由我应该用注释走更长的路吗?感谢您的帮助并保持健康!

标签: pythondjangosqlite

解决方案


文档中,您的用例可以只使用.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)

推荐阅读