【发布时间】:2013-11-07 10:25:11
【问题描述】:
我有一个数据库表,其中包含代表年度重复事件的项目集。记录集按月和日存储。我经常需要检索与一系列日历日期相对应的事件记录。我正在使用 Django ORM 来处理记录,所以目前我将日期转换为相应的 Q 对象(例如 Q(month=month, day=day) 并在对 MyModel.objects.filter() 的调用中将它们组合在一起。
如果我的日期范围与新年相交,就会出现问题。如果我想要从 2013 年 12 月 31 日到 2014 年 1 月 1 日的事件,我会这样做:
MyModel.objects.filter(Q(month=12, day=31) | Q(month=1, day=1))
但我按顺序得到结果:
month = 1, day = 1
month = 12, day = 31
相反,我想按顺序获得结果:
month = 12, day = 31
month = 1, day = 1
出于不必要地使问题复杂化的原因,我不能简单地将查询分成两个查询,每年一个。我想进行一次查询并按所需顺序获取结果。如有必要,我可以重新编写查询。
我知道extra 应该很有用,但我不太明白如何使用它。
更新:
为了更接近预期的解决方案,强制执行绝对排序,我可以以某种方式将Julian Day 作为“计算”字段滑入结果中,并按该字段排序。但是该怎么做呢?
【问题讨论】:
-
有
year字段吗? -
不,否则这将是微不足道的。 :) 这些记录代表每年都会发生的事件。
-
这个查询是否允许加入? (我的意思是它会影响性能吗?)
-
我不明白为什么不这样做。我愿意至少尝试一下。
-
范围是否总是跨越两个月,还是可以有任意长度?
标签: python sql django sorting orm