Mam model, który zawiera datefield
. Próbuję uzyskać zestaw kwerend tego modelu, który zawiera bieżący tydzień (rozpoczyna się w poniedziałek).Filtrowanie zapytań Django według numeru tygodnia ISO
Ponieważ Django datefield
zawiera prosty model datetime.date
, który zgodnie z założeniem powinien zostać przefiltrowany przy użyciu .isocalendar()
. Logicznie jest to dokładnie to, czego chcę, bez dodatkowych porównań i obliczeń według bieżącego dnia tygodnia.
Więc to, co chcę robić w istocie jest siła .filter
oświadczenie zachowywać się w tej logice:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
Jednak jak napisać go wewnątrz oświadczenie filtra? .filter(model__date__isocalendar=datetime.date.today().isocalendar())
spowoduje błędne wyniki (takie same jak w porównaniu do dzisiaj, nie w tym tygodniu).
jak wykopy prawdziwej http://docs.python.org/library/datetime.html nie zauważyłem żadnych innych opcji dzień tygodnia ...
Uwaga od dokumentacji:
date.isocalendar() Zwraca 3-krotki (rok ISO , Numer tygodnia ISO, ISO w dni powszednie).
Aktualizacja:
Choć lubił rozwiązanie przy użyciu zakresów jeszcze jest najlepszym rozwiązaniem. Jednak w moim przypadku stworzyłem zmienną, która oznacza początek tygodnia i po prostu wyglądam na większą lub jednakową wartość, ponieważ jeśli szukam meczów na bieżący tydzień. W przypadku podania numeru tygodnia Wymagałoby to obu końców.
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)
ja nie wiem, czy wsparcie ORM, które jednak można awaryjny do surowego zapytania, jeśli nie https://docs.djangoproject.com/en/dev/topics/db/sql/ – dm03514
Jestem świadomy tej opcji dm03514, ale wolałbym napisać wtedy własny filtr. Jest to również opcja, ale chciałbym wiedzieć, że możliwe jest osiągnięcie tego przy pomocy domyślnych akcji w Django bez rozszerzania go. – JackLeo
przy okazji jest fajny moduł python dateutil, który może być pomocny http://pypi.python.org/pypi/python-dateutil – aisbaa