我有一张带有下列列的“票”
主密钥-自动increment
当我执行一个SELECT *
时,我希望在顶部有status = 4
的行,其他记录将跟随它们。它可以通过以下查询来实现:
select * from tickets order by status=4 DESC
这个查询可以通过Django ORM执行吗?哪些参数应该传递给QuerySet.order_by()
方法?
发布于 2010-02-01 12:08:41
q = Ticket.objects.extra(select={'is_top': "status = 4"})
q = q.extra(order_by = ['-is_top'])
发布于 2017-04-18 07:38:47
我是在与django一起使用PostgresSql时这样做的。
from django.db.models import Case, Count, When
Ticket.objects.annotate(
relevancy=Count(Case(When(status=4, then=1)))
).order_by('-relevancy')
它将返回票证中的所有对象,但是状态=4的票证将在开头。
希望有人会发现它有用。
发布于 2020-12-18 15:53:05
对于那些像我一样需要帮助的人,他们现在偶然发现了这一点,并且正在使用更新版本的Django。
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,这取决于是否找到了您的情况。如果按几种状态订购,那就不太理想了
https://stackoverflow.com/questions/2176346
复制相似问题