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