首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django ORM能否根据列的特定值进行排序?

Django ORM能否根据列的特定值进行排序?
EN

Stack Overflow用户
提问于 2010-02-01 11:37:39
回答 3查看 7.9K关注 0票数 22

我有一张带有下列列的“票”

主密钥-自动increment

  • title - varchar(256)

  • status -(6)-可以具有1到5之间的任何值,由Django处理。

当我执行一个SELECT *时,我希望在顶部有status = 4的行,其他记录将跟随它们。它可以通过以下查询来实现:

代码语言:javascript
运行
复制
select * from tickets order by status=4 DESC

这个查询可以通过Django ORM执行吗?哪些参数应该传递给QuerySet.order_by()方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-01 12:08:41

代码语言:javascript
运行
复制
q = Ticket.objects.extra(select={'is_top': "status = 4"})
q = q.extra(order_by = ['-is_top'])
票数 24
EN

Stack Overflow用户

发布于 2017-04-18 07:38:47

我是在与django一起使用PostgresSql时这样做的。

代码语言:javascript
运行
复制
from django.db.models import Case, Count, When

Ticket.objects.annotate(
    relevancy=Count(Case(When(status=4, then=1)))
).order_by('-relevancy')

它将返回票证中的所有对象,但是状态=4的票证将在开头。

希望有人会发现它有用。

票数 12
EN

Stack Overflow用户

发布于 2020-12-18 15:53:05

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

代码语言:javascript
运行
复制
from django.db.models import Case, When

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,这取决于是否找到了您的情况。如果按几种状态订购,那就不太理想了

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2176346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档