我是Python和Django的新手。我有项目清单。每个项目都有2个字段:start_date
和update_date
。
我试图按以下顺序查询项目:
- 如果今天是开始日期>,则按
start_date
进行排序,然后按update_date
进行排序 - 其他(开始日期update_date和
start_date
排序
我最终得到以下查询:
today = date.today()
all = m.items.objects.annotate(updated_at_date=TruncDate('updated_date'))
upcoming = all.filter(start__gte=today).order_by('start_date','-updated_date')
started = all.filter(start__lt=today).order_by('-updated_date','start_date')
queryset = upcoming.union(started)
但是当我打印结果时,我以不同的顺序得到它。但是,如果我只返回upcoming
或仅返回started
,我将得到很好的排序。
我认为联盟破坏了我的命令。我的查询有什么问题?我该如何解决?