【问题标题】:Order queryset by date in descending order, but for elements which dates are less that now() order in ascending?按日期按降序排列查询集,但对于日期小于 now() 的元素按升序排列?
【发布时间】:2018-08-16 05:51:37
【问题描述】:

我有一个查询集,我想分成两部分。第一部分将包含具有未来日期和第二部分 - 过去日期的对象。问题是:我需要以不同的顺序对两个部分进行排序。一降,二升。

我需要输出是查询集,而不是列表,因为我想对它们使用过滤器和分页。

有可能吗?

【问题讨论】:

  • 在 queryset 和 orderby 上使用过滤器。查询集应用分页
  • @HemanthSP 有道理,但我自己设法解决了。无论如何,谢谢!

标签: django django-queryset django-orm


【解决方案1】:

所以,我自己设法解决了这个问题:

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

def get_queryset(self):
    return Course.objects.filter(status=1, type_course=2).annotate(
        past_date=Case(
            When(date__lt=date.today(), then=0),
            When(date__gte=date.today(), then=1),
            output_field=IntegerField()
        )).order_by('-past_date', 'date')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多