python - 如何使用两个字段作为组合字段对 django 查询集进行排序
问题描述
我有一个Deadline
模型,它有两个字段,start_date
并且end_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>
解决方案
在我前面提到的代码中,注释字段在联合之后没有被结转,因此我无法在其上使用 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
领域。
推荐阅读
- c++ - Msys2 不为 GTK3 安装 lib 文件
- javascript - UTF-8 vs UTF-16 和 UTF-32 转换混淆
- python - 如何在同一个 Pandas 数据框单元格中的列表元素之间放置换行符?
- python - 为什么“num[0]+=1 if X else num[1]+=1”语法无效?
- linux - Linux:sed:-e 表达式#1,字符 1:未知命令:`.'
- javascript - 为什么在 JavaScript 中分配 Infinity 不会引发错误,但不起作用?
- javascript - Ajax 调用 Python 脚本。我错过了什么?
- pdf - 通过 SendGrid 发送受密码保护的附件
- r - shinyapps.io “与服务器断开连接”/“内存不足”问题
- c# - Microsoft.NET.Sdk.Functions 和 xunit.runner.visualstudio 不兼容