如何使用两个字段作为组合字段对Django queryset进行排序

时间:2019-01-10 13:59:10

标签: python django sorting django-queryset django-orm

我有一个Deadline模型,其中有两个字段start_dateend_date。 我想对两个字段的查询集进行排序,但是每个日期都有一个截止日期的副本

我尝试创建带注释的公共字段并进行排序。

class Deadline(models.Model):
    start_date = models.DateTimeField()
    end_date = models.DateTimeField

dl_start = deadline_queryset.annotate(date=F('start_date'))
dl_end = deadlien_queryset.annotate(date=F('end_date'))
dl_all = dl_start.union(dl_end).order_by('date')

我需要一个事件时间表。
考虑一下我的查询集是否有2个对象:

Deadline <id: 1, start_date: 12-dec, end_date: 24-jan>
Deadline <id: 2, start_date: 15-dec, end_date: 21-jan>

我需要一个截止日期列表,例如:

Deadline <id: 1, start_date: 12-dec, end_date: 24-jan, date: 12-dec>
Deadline <id: 2, start_date: 15-dec, end_date: 21-jan, date: 15-dec>
Deadline <id: 2, start_date: 15-dec, end_date: 21-jan, date: 21-jan>
Deadline <id: 1, start_date: 12-dec, end_date: 24-jan, date: 24-jan>

1 个答案:

答案 0 :(得分:0)

在我前面提到的代码中,合并后的字段没有被结转,因此我无法在其上使用order_by。

它在使用以下变体后起作用:

dl_start = deadline_queryset.annotate(date=F('start_date')).values('id', 'start_date', 'end_date', 'date')
dl_end = deadlien_queryset.annotate(date=F('end_date')).values('id', 'start_date', 'end_date', 'date')
dl_all = dl_start.union(dl_end).order_by('date')

这帮助我推动了带注释的date字段。