Ich habe ein Modell, das datefield
enthält. Ich versuche, Abfrage-Set dieses Modells zu erhalten, das aktuelle Woche enthält (beginnt am Montag).Django Queryset Filterung nach ISO-Woche Nummer
Also, da Django datefield
enthält einfach datetime.date
Modell nahm ich an, mit .isocalendar()
zu filtern. Logischerweise ist es genau das, was ich ohne zusätzliche Vergleiche und Berechnungen bis zum aktuellen Wochentag möchte.
Also, was soll ich im Wesentlichen tun, ist Kraft .filter
Aussage in dieser Logik zu verhalten:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
Doch wie es in Filteranweisung zu schreiben? .filter(model__date__isocalendar=datetime.date.today().isocalendar())
wird falsche Ergebnisse geben (wie im Vergleich zu heute nicht diese Woche).
Als Graben wahr http://docs.python.org/library/datetime.html ich alle anderen Wochentag Optionen nicht bemerkt haben ...
Hinweis aus Dokumentation:
date.isocalendar() Gibt ein 3-Tupel (ISO Jahr , ISO-Wochennummer, ISO Wochentag).
Update:
Obwohl ich die Lösung der Verwendung reicht nicht mochte aber es ist die beste Option. In meinem Fall habe ich jedoch eine Variable erstellt, die den Beginn der Woche markiert und einfach größer oder gleichwertig aussieht, wenn ich nach einem Match für die aktuelle Woche suche. Im Falle der Angabe der Zahl der Woche würde es beide Enden erfordern.
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)
folgt Ich weiß nicht, ob die ORM-Unterstützung, die aber Sie können Rückfall zu Rohabfrage, wenn es nicht tut https://docs.djangoproject.com/en/dev/topics/db/sql/ – dm03514
Ich bin mir dieser Option dm03514 bewusst, aber ich würde lieber meinen eigenen Filter dann schreiben. Das ist auch eine Option, aber ich möchte wissen, ob es möglich ist, dies mit Standardaktionen in Django zu erreichen, ohne es zu erweitern. – JackLeo
BTW gibt es schön Python-Dateutil-Modul, das hilfreich sein könnte http://pypi.python.org/pypi/python-dateutil – aisbaa