2010-06-06 14 views
5

Ich habe gefunden, dass Link: http://code.djangoproject.com/attachment/ticket/8424/time_filters.diff und änderte meine django 1.2 Dateien durch Hinzufügen von was Sie dort sehen können.
Aber jetzt, wenn ich versuche, Entry.objects.filter (pub_date__hour = x) zu schreiben - das Ergebnis wird folgende Fehlermeldung:Django Filter von Stunde

Field has invalid lookup: hour

Was soll ich anderes tun, es funktioniert?

(sorry für mein Englisch)

+0

Ich bin nicht ganz sicher, ob dieser Patch mit 1.2 arbeiten soll. –

Antwort

0

Vielleicht definiert man pub_date als DateField, aber es muss eine DateTimeField sein? Können Sie Ihren Modelldefinitionscode in die Frage aufnehmen?

+0

ja - es ist DateTimeField – DJPy

4
Entry.objects.filter(pub_date__hour = x) 

wird ab django 1.2 nicht unterstützt - nur Jahr, Monat, Tag, Woche_Tag.

Verwendung so etwas wie diese:

Entry.objects.filter(pub_date__regex = '08:00') 

oder

Entry.objects.filter(pub_date__contains = '08:00') 

, die Sie alle Eintrag mit den Stundenobjekten (über alle Jahre).

1

Wahrscheinlich besser von einer rohen SQL-Abfrage verwenden wie:

Whatever.objects.raw("SELECT * FROM table WHERE TIME(pub_date) LIKE '%%08:30%%' ") 
2

Django 1.7 Unterstützung für benutzerdefinierte Abfragen und Transformationen. Eine Stunde Transformation wird implementiert, wie auf PostgreSQL folgt:

class HourExtract(models.Transform): 
    lookup_name = 'hour' 
    output_type = models.IntegerField() 

    def as_sql(self, compiler, connection): 
     lhs_sql, lhs_params = compiler.compile(self.lhs) 
     return "EXTRACT(hour FROM %s)" % lhs_sql, lhs_params 

models.DateTimeField.register_lookup(HourExtract) 

Jetzt können Sie tun .filter (pub_date__hour__lte = x) und andere ähnliche Abfragen auf dem Stundenwert.

+0

Wenn ich das tue und versuche, mit MyModel.objects.filter (date__hour = 8) zu filtern, sagt Django, dass es eine Strigg oder einen Puffer erwartet, als ob das Date__hour als Datetime und nicht als Integer erwartet wurde –