2 Stimmen

Wie man den Django ORM verwendet, um nur nach Datum in einem datetimefield abzufragen

Ich habe eine Tabelle mit einem DataTimeField. Ich möchte eine Liste aller Objekte erhalten, bei denen das DateTimeField = ein bestimmter Tag ist (ohne den Zeitteil).

Die SQL würde etwa so aussehen:

select * from tblname where date(start)='2011-01-14'

Ist es möglich, den ORM dazu zu bringen, diese Art von Abfrage durchzuführen?

Ich kann eine start__range(...) Art von Abfrage zu tun, aber ich fragte mich, wenn ich es auf die andere Weise tun könnte.

4voto

Evan Porter Punkte 2969

Desde el QuerySet API-Referenz :

Entry.objects.filter(pub_date__year=2005)
Entry.objects.filter(pub_date__month=12)
Entry.objects.filter(pub_date__day=6)

Dies funktioniert für Dates und DateTimes.

2voto

Black Hand Punkte 310
MyModel.object.filter(start__year=2011, start__month=01, start__day=14)

das Problem mit dieser Abfrage ist, dass wenn Ihre DB nicht suport Index mit Funktionen (Hallo MySQL) Sie eine unzulängliche Abfrage haben.

Eine Alternative kann sein, dass Sie ein neues Feld hinzufügen start_date = models.DateField(...) und überlasten Ihr save(...) Methode, um das Feld richtig zu setzen, oder wenn Sie mehr eine Datenbank-Seite dev, verwenden Sie einen Trigger für die gleiche Funktion, nach diesem, können Sie tun:

MyModel.object.filter(start_date=date(2011, 1, 13))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X