Django order_按多对多关系

Django order_按多对多关系,django,django-queryset,Django,Django Queryset,如何根据多对多关系条件是否为真来排序查询集 i、 e 我想做一个关于 Publication.objects.all().order_by('books__name'='Awesome Book') 因此,第一项是出版物,其中包含一本名为“很棒的书”的书,然后最终你拥有所有没有这本书的出版物。这里有一种可行的方法,创建一个新字段以进行排序,通过该字段将逻辑表达式映射到数值 from django.db.models import Case, When, Value, IntegerField

如何根据多对多关系条件是否为真来排序查询集

i、 e

我想做一个关于

Publication.objects.all().order_by('books__name'='Awesome Book')

因此,第一项是
出版物
,其中包含一本名为“很棒的书”的
,然后最终你拥有所有没有这本书的
出版物。

这里有一种可行的方法,创建一个新字段以进行排序,通过该字段将逻辑表达式映射到数值

from django.db.models import Case, When, Value, IntegerField

Publication.objects.annotate(
    ordering=Case(
        When(books__name="Awesome Book", then=Value(0)),
        default=Value(1),
        output_field=IntegerField(),
    )
).order_by("ordering")
from django.db.models import Case, When, Value, IntegerField

Publication.objects.annotate(
    ordering=Case(
        When(books__name="Awesome Book", then=Value(0)),
        default=Value(1),
        output_field=IntegerField(),
    )
).order_by("ordering")