У меня есть модель, которая содержит datefield
. Я пытаюсь получить набор запросов этой модели, содержащий текущую неделю (начинается в понедельник).
Итак, поскольку Django datefield
содержит простую модель datetime.date
, я предположил, что фильтрую с помощью .isocalendar()
. По логике это именно то, что я хочу, без лишних сравнений и расчетов по текущему дню недели.
Итак, что я хочу сделать, по сути, это заставить оператор .filter
вести себя по следующей логике:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
Но как записать его внутри оператора filter?
.filter(model__date__isocalendar=datetime.date.today().isocalendar())
даст неверные результаты (такие же, как при сравнении с сегодняшним днем, а не с этой неделей).
При копании верно http://docs.python.org/library/datetime.htmlДругих вариантов дня недели я не заметил...
Примечание из документации:
дата .isocalendar() Возвращает 3-кортеж (год ISO, номер недели ISO, будний день).
Обновление:
Хотя мне не понравилось решение с использованием диапазонов, это лучший вариант. Однако в моем случае я сделал переменную, которая отмечает начало недели и просто выглядит больше или равно значению, потому что, если я ищу совпадения для текущей недели. В случае указания номера недели потребуются оба конца.
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)