代码之家  ›  专栏  ›  技术社区  ›  rubayeet

Django ORM可以根据列的特定值进行排序吗?

  •  18
  • rubayeet  · 技术社区  · 15 年前

    • id-主键-自动递增
    • 标题-varchar(256)
    • 状态-smallint(6)-可以有介于1和5之间的任何值,由Django处理

    SELECT * 我要一排的 status = 4 在顶部,其他记录将跟随它们。可通过以下查询实现:

    select * from tickets order by status=4 DESC
    

    QuerySet.order_by() 方法?

    2 回复  |  直到 15 年前
        1
  •  21
  •   Ofri Raviv    15 年前
    q = Ticket.objects.extra(select={'is_top': "status = 4"})
    q = q.extra(order_by = ['-is_top'])
    
        2
  •  9
  •   Hemant_Negi    7 年前

    我是在django中使用PostgresSql时这样做的。

    from django.db.models import Case, Count, When
    
    Ticket.objects.annotate(
        relevancy=Count(Case(When(status=4, then=1)))
    ).order_by('-relevancy')
    

    希望有人会觉得它有用。

        3
  •  3
  •   jcobacho    4 年前

    对于那些需要帮助的人,就像我一样,现在偶然发现了这一点,并且正在使用更新版本的django

    Ticket.objects.annotate(
                relevancy=Case(When(status=4, then=1), When(status=3, then=2), When(status=2, then=3), output_field=IntegerField())
            ).order_by('-relevancy')
    

    使用Count()将返回1或0,具体取决于是否找到您的案例。如果按几个状态排序,则不理想