Probleme filtern django datetime-Feld mit Monat und Tag
Kann mir jemand erklären warum der folgende Filter nicht auf den Monat und den Tag-Ebene? Filterung von Jahr zu funktionieren scheint, aber nicht die anderen beiden.
>>> clicks.count()
36
>>> date = clicks[0].created
>>> date.month
2
>>> date.year
2014
>>> date.day
1
>>> clicks.filter(created__month=2)
[]
>>> clicks.filter(created__month=02)
[]
>>> clicks.filter(created__month='02')
[]
>>> clicks.filter(created__month='2')
[]
>>> clicks.filter(created__month=date.month)
[]
>>> clicks.filter(created__day=date.day)
[]
Ein schnelles update, um zu demonstrieren, dass ich immer das gleiche Verhalten vor der Erstellung und der Umgang mit einem queryset:
>>> clicks = PreviewClick.objects.filter(created__month = 2)
>>> clicks.count()
0
>>> clicks = PreviewClick.objects.filter(created__month = 02)
>>> clicks.count()
0
>>> clicks = PreviewClick.objects.filter(created__month = '02')
>>> clicks.count()
0
>>> clicks = PreviewClick.objects.filter(created__month = '2')
>>> clicks.count()
0
Hier mehr food for thought:
>>> clicks = PreviewClick.objects.all()
>>> counter = 0
>>> for click in clicks:
... if click.created.month == 2:
... counter += 1
...
>>> counter
35
- Wie hast du die Klicks?
- Sind Sie sicher, Sie haben Klicks mit 'created' datiert von Feb? Ich habe gerade versucht diesen filter auf eine unserer Datenbanken, und es funktionierte gut für mich.
- Es sieht aus wie Sie haben <Modell>.Objekte.alle() vergeben, die auf Klicks und dann versuchen zu filtern. Sie wahrscheinlich wollen zu tun <Modell>.Objekte.filter(....)
- In der zweiten Zeile schnappte ich mir die aktuelle 'erstellt' - Wert für das erste Element in der queryset und zeigte, dass die Monat Wert ist in der Tat Februar. Also der filter sollte MINDESTENS einen Eintrag, richtig?
- Können Sie uns zeigen, dass
PreviewClick.objects.all()
Objekte, die es in einem Monat 2 - lol Ja, ich dachte, die gleiche Sache. Ich aktualisiert die Informationen, während Sie fragten.
- Haben Sie versucht, einen Neustart Ihres Computers und zurücksetzen des Routers 🙂
- Sie müssen nicht etwas Phantasie in Ihrem Modell haben Sie?
- Ich habe genau das gleiche Problem wie du @zorrotmm. Django version 1.6.1 Python version 2.7.5 Mac OS Das Modell Feld, das ich verwende, ist Modelle.DateTimeField .filter(datetime__Jahr=2014) funktioniert .filter(datetime__Monat=2) nicht .filter(datetime__Tag=25) keine Werde aktualisieren, wenn ich eine Lösung finden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sah ich genau das gleiche Verhalten wie du.
Wenn Sie das Kontrollkästchen Dokumentation für 1.6 und den Monat queryset. Sie haben Hinzugefügt, der folgende Absatz:
Wenn Sie ändern Sie die folgende Zeile in Ihre Einstellungen auf False, dann sollten Sie anfangen, die Daten zurück, die Sie erwartet haben.
@Simon Wilder perfekt beantworten, warum es nicht funktioniert, hier ist, wie Sie tatsächlich zu lösen, die es ohne deaktivieren der TZ-Unterstützung in django
Django Dokument geben Anleitung zu installieren, Zeitzonen-definition Datenbank:
In meinem Fall : mysql und Mac Os, kann man folgenden Befehl das problem zu lösen:
Ihre syntax ist falsch. Es sollte sein:
(Sie Links aus der 'Objekte' - manager)
Aktualisieren die Antwort hier, da lief ich in den oben genannten Problem, aber keine der Lösungen hat funktioniert. Die meisten mysql-Installationen vorinstalliert mit tz-info, so die mysql_tzinfo_to_sql Befehl nicht wirklich helfen. Und Einstellung TZ_INFO auf False ist nicht wirklich eine Lösung, da viele brauchen Zeit-zone bewusst, datetime.
So, was für mich gearbeitet war eine tz bewusst datetime-Objekt und überprüfen Sie, gegen, die. Können sagen, Sie wollen filtern von Datensätzen für heute würden Sie so etwas tun,
Hoffe, das hilft.