Фильтр даты Django - найти промежуточную дату - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь создать запрос, который возвращает событие, если оно выполняется в любой точке данного периода времени между двумя датами.

модель:

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).Сначала эта логика работала так, как задумано.Однако есть проблема, и я знаю, что есть, но не знаю, как ее решить.

Например, если моя модель событий начинается в декабре и заканчивается в феврале, приведенный выше код вернет событие за декабрь и февраль, но не вернет одно за январь, поскольку он не начинается и не заканчивается в этом месяце.Как я могу настроить этот код так, чтобы он возвращал событие, которое выполняется в течение нескольких месяцев.

1 Ответ

0 голосов
/ 15 февраля 2019

Похоже, я уже слишком много думал об этом и решил проблему, упрощая.

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

Я понял, что могу просто посмотреть на месяц и мне не нужно разбиратьдаты, как все, что я хотел знать, это то, что событие проходило в тот месяц между датой его начала и окончания.

...