Django 日期过滤器 - 查找中间日期

Django date filter - find a date in-between

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

型号:

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 月结束,上面的代码将 return 12 月和 2 月的事件,但它不会 return 1 月的事件,因为它既在那个月开始或结束。我如何调整此代码,使其 return 一个 运行 持续数月的事件。

看来我想多了,通过简化解决了这个问题。

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

我意识到我可以只看月份而不需要 运行ge 日期,因为我只想知道那个月的事件 运行开始和结束日期。