Django日期过滤器-查找介于两者之间的日期

时间:2019-02-15 19:50:06

标签: python-3.x django-2.1

我正在尝试创建一个查询,如果该事件在两个日期之间的给定时间段内的任何时间运行,则返回一个事件。

型号:

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月返回一个事件,因为它既不在该月开始也不在该月结束。如何调整此代码,使其返回运行多个月的事件。

1 个答案:

答案 0 :(得分:0)

似乎我已经考虑不周了,并通过简化解决了该问题。

filter.append(Q(start_date__month__lte=month, hd_end_date__month__gte=month))

我意识到我可以查看月份,而不必更改日期范围,因为我想知道的是,该事件在开始日期和结束日期之间的那个月份进行。