python - Django 按时间从特定小时开始排序查询集,最后发送其他结果

标签 python django django-queryset

我有以下 django 查询:

views.some_model.objects.all().order_by('start')

这很好用。结果是这样的:

{00:00, 00:30, 02:03, 04:00, 05:33}

如果我需要它从特定时间开始 order_by 并将其余时间发送到最后(也已订购)怎么办?像这样:

{02:03, 04:00, 05:33, 00:00, 00:30}

我知道我可以进行两个查询(一个从我需要的时间开始,另一个从最后一部分开始),但是有没有更Pythonic的方法?

最佳答案

我的第一直觉是使用两个查询。但既然你想探索替代方案,我想出了这个看起来非常难看的查询 -

from django.db.models import Case, When, Value, IntegerField

qs = views.some_model.objects
           .annotate(
               recent=Case(
                   When(start__gt=some_date_var,
                        then=Value(1)),
                   default=Value(0),
                   output_field=IntegerField()))
           .order_by('-recent', 'start')

基本上,如果开始大于,则首先用 bool 值(我称之为最近)标记进行注释some_date_var(1 表示起始时间较大,0 否则)。现在首先按最近降序排列,然后按开始升序排列

关于python - Django 按时间从特定小时开始排序查询集,最后发送其他结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52764262/

相关文章:

django - 新 Django 类 View 表单上的用户当前用户

python - 在切片之前评估 Django 查询集对象(或不是)的最佳实践方法?

python - 如何获取所有行的 QuerySet,每一行都有特定的字段?

需要登录的Python阅读url

Python:来自 `threading` 和 `multiprocessing` 的锁可以互换吗?

django - 使用主管作为守护程序运行celery无法正常工作

Django - 原始 SQL 查询或 Django QuerySet ORM

Python 请求 - 403 禁止 - 尽管设置了 `User-Agent` header

Python GTK MVC : Kiwi?

django - 以无人身份启动 Gunicorn 时出错