170 похожих чатов

Подскажите пожалуйста, как реализовать такой алгоритм фильтрации у меня есть модель

Event. Она имеет две даты, от и до. Назовёт условно start и end.
Мне нужно отфильтровать ивенты начиная с сегодняшнего дня и до самого конца.
НО. ивент может содержать как период от-до, так и просто одну дату, а вторая будет None
Представим, что есть список ивентов 2 числа, 5 числа, 9 числа, 1-7 числа, 28 числа прошлого месяца до 5 числа этого месяца.
И в результате нужно получить картину по типу:
28 числа прошлого месяца до 5 числа этого месяца, 1-7 числа, 2, 5 числа, 9 числа
То есть если текущая дата попадает в промежуток, то она так же отображается где-то в начале

Ломаю голову, не понимаю как реализовать, кто-то сталкивался?

16 ответов

6 просмотров

Давай еще разок. Есть события start end 06.28 07.05 07.02 None 07.05 None 07.09 None 07.01 07.07 07.05 07.09 Сегодня 07.02, что надо получить?

SERGEY- Автор вопроса

картина должна быть примерно такая: start end 06.28 07.05 07.01 07.07 07.02 None 07.05 None 07.05 07.09 07.09 None примерно это если встречается такое: 07.05 None 07.05 07.09 то порядок между ними не имеет значения

Так .order_by('start') нужен?

SERGEY- Автор вопроса

да, по сути нужно сортировать по start но нужно как-то учитывать и диапазоны если бы было просто поле start date, то я сделал бы что-то типа start_data__lte=today но такой вариант отсечёт варианты по типу start end 06.28 07.05

.filter(Q(end_date__gte=today) | Q(end_date=None),start_date__lte=today)

SERGEY- Автор вопроса

если я правильно понял (и я проверил на практике), оно фильтрует в принципе правильно, но launch_date__lte=days ищет дни раньше сегодняшнего, то есть исключает варианты будущих ивентов. То есть, если сегодня 07.02, то ивент 07.05-07.10 не попадёт в список :( Возможно ли как-то это исправить?

используются в фильтрах lte и gte?

SERGEY- Автор вопроса

да

покажи код который получился?

SERGEY- Автор вопроса

я твой же код использовал .filter(Q(end_date__gte=today) | Q(end_date=None),start_date__lte=today) пытался чуток переписать, но всё-равно выходит не то, что надо. Твой вариант наиболее близкий к нужному результату

start_date и end_date на своих местах? Не перепутаны?

SERGEY- Автор вопроса

Да, они точно на своих местах как я понял по логике кода: идёт фильтрация по условию, что end_date будет позже текущей даты либо = None (это правильно) а start_date должна быть раньше сегодняшней даты (потому что start_date__lte стоит)

lte и gte тут буква e - equal (равно)

Да, Longer Than or Equal

Давай прочитаем, что написано. .filter(Q(end_date__gte=today) | Q(end_date=None),start_date__lte=today) выбрать записи ЕСЛИ (ДатаОкончения>=Сегодня ИЛИ ДатаОкончания=None) И (ДатаНачала<=Сегодня). Получается есть Событие 07-07 и сегодня 07, то ДатаОкончения>=Сегодня - это True ДатаНачала<=Сегодня - это True Как мне кажется, всё должно работать.

SERGEY- Автор вопроса

я понял как работает твой алгоритм, он действительно работает так, как ты описал: выбрать записи ЕСЛИ (ДатаОкончения>=Сегодня ИЛИ ДатаОкончания=None) работает правильно, но это: И (ДатаНачала<=Сегодня) делает выборку ТОЛЬКО по тем записям, которые начинаются <= сегодняшнего дня. Но нужно сюда ещё и прибавить ивенты, которые начинаются ПОСЛЕ сегодняшнего дня. То есть, сегодня 2 июля и есть ивент, который начинается 5 июля (и в принципе нам не важно когда он заканчивается), так вот он должен быть в списке Спасибо за помощь, я уже додумался как надо Сделал вот так all_bounties = Bounty.objects.filter(period_date__gte=days, launch_date__lte=days) all_bounties = Bounty.objects.filter(Q(period_date__gte=days) | Q(period_date=None), launch_date__gt=days) | all_bounties all_bounties = all_bounties.order_by('launch_date')

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта