Временной интервал кверисета Django

Мне нужно сделать выборку объектов в моей базе данных по временному интервалу

В настоящее время я нашел метод для выбора только объектов из дня, но не из интервала с помощью этого:

data.filter(end_at__day=datetime.datetime.now().day)

Я видел это в документации django __gte, что означает от даты до сегодня, но мне не удалось заставить это работать

enter image description here

Я попробовал следующее:

    if request.method == 'POST':
        form = DashboardSettingsForm(data=request.POST)
        if form.is_valid():
            dis_planned = form.cleaned_data.get('display_planned')
            dis_currently = form.cleaned_data.get('display_currently')
            dis_ended = form.cleaned_data.get('display_ended')
            end_at = start_at = datetime.now()

            if dis_ended:
                end_at = datetime.now() - timedelta(hours=12)
            if dis_planned:
                start_at = datetime.now() + timedelta(hours=12)
            data = data.filter(start_at__gt=start_at, end_at__gt=end_at)
            print(f"interval: start{start_at} end{end_at}")
data = data.filter(start_at__gt=start_at, end_at__gt=end_at)

Приведенная выше строка означает, что объекты должны удовлетворять:

  1. start_ats that are later than datetime.now() - timedelta(hours=12)
  2. end_ats that are later than datetime.now() + timedelta(hours=12)

Так что вам нужно использовать обратное (lt) для end_at, чтобы сделать фильтр, который охватывает диапазон в пределах :

data = data.filter(start_at__gt=start_at, end_at__lt=end_at)

Это означает, что объекты должны соответствовать следующим критериям:

  1. start_ats that are later than datetime.now() - timedelta(hours=12)
  2. end_ats that are earlier than datetime.now() + timedelta(hours=12)
Вернуться на верх