Django/Python - Проверить дату на текущей неделе
Я хотел бы сделать что-то вроде этого:
entries = Entry.objects.filter(created_at__in = current_week())
Как сделать это для хорошей производительности. Спасибо!
Изменить: я до сих пор не знаю, для функции current_week()
.
Ответы
Ответ 1
Используйте __range
. Сначала вам нужно рассчитать начало и конец недели:
import datetime
date = datetime.date.today()
start_week = date - datetime.timedelta(date.weekday())
end_week = start_week + datetime.timedelta(7)
entries = Entry.objects.filter(created_at__range=[start_week, end_week])
Ответ 2
Начиная с django 1.11, вы можете:
Entry.objects.filter(created_at__week=current_week)
Это даст вам неделю с понедельника по воскресенье, согласно ISO-8601.
Чтобы запросить текущую неделю:
from datetime import date
current_week = date.today().isocalendar()[1]
isocalendar() вернет кортеж с тремя элементами: (год ISO, номер недели ISO, день недели ISO).
Ответ 3
Да, этот вопрос есть 2 года назад. Сегодня, когда у меня больше опыта, я рекомендую использовать arrow
с меньшей болью при обработке даты.
Оформить заказ: https://github.com/crsmithdev/arrow