【问题标题】:Django order_by many to many relationDjango order_by 多对多关系
【发布时间】:2017-11-06 22:18:03
【问题描述】:

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

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,其中包含标题为“Awesome Book”的Book,然后最后你有所有没有这本书的Publication's

【问题讨论】:

    标签: django django-queryset


    【解决方案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")
    

    【讨论】:

      猜你喜欢
      • 2017-11-22
      • 2012-02-26
      • 1970-01-01
      • 2011-06-02
      • 2012-09-18
      • 2023-03-09
      相关资源
      最近更新 更多