如何根据多对多关系条件是否为真来订购查询集?
即
class Publication(models.Model):
name = models.CharField(max_length=100)
books = models.ManyToManyField(Book)
class Book(models.Model):
name = models.CharField(max_length=100)
author = models.CharField(max_length=100)
我想按照
的方式创建一个查询集Publication.objects.all().order_by('books__name'='Awesome Book')
这样,第一个项目就是Publication
,其中包含Book
标题为" Awesome Book"然后最后你得到了所有没有这本书的Publication's
。
答案 0 :(得分:1)
这是一种可行的方法,创建一个新的字段进行排序,将逻辑表达式映射到数值。
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")