我正在尝试创建一个查询,如果该事件在两个日期之间的给定时间段内的任何时间运行,则返回一个事件。
型号:
class MyModel(models.Model):
start_date = models.DateField(auto_now=False, blank=True, null=True, verbose_name="Start date")
hd_end_date = models.DateField(blank=True, default=None, null=True, verbose_name="End date")
要尝试过滤的当前代码:
import calendar
max_day = calendar.monthrange(year, month)[1]
start = "{}-{}-01".format(year, month)
end = "{}-{}-{}".format(year, month, max_day)
# If the event starts in the month, or if it ends in the month
filter.append(Q(start_date__range=[start, end]) |
Q(hd_end_date__range=[start, end]))
我的模型有一个start_date
和一个end_date
(hd_end_date)。起初,这种逻辑似乎可以正常工作。但是有问题,我知道是什么,只是不知道如何解决。
例如,如果我的事件模型在12月开始并在2月结束,则上面的代码将返回12月和2月的事件,但不会在1月返回一个事件,因为它既不在该月开始也不在该月结束。如何调整此代码,使其返回运行多个月的事件。
答案 0 :(得分:0)
似乎我已经考虑不周了,并通过简化解决了该问题。
filter.append(Q(start_date__month__lte=month, hd_end_date__month__gte=month))
我意识到我可以查看月份,而不必更改日期范围,因为我想知道的是,该事件在开始日期和结束日期之间的那个月份进行。