2009-07-08 5 views
0

Ich habe diese Zeile Code in meinen Ansichten, die mir eine Gruppe von Elementen nach dem Datum angezeigt werden kann (ich habe umgekehrt auch die Reihenfolge so die neuesten Anzeigen zuerst):Wie kann ich die Ergebnisse eines Abfragefilters bestellen?

currentlinks = Current.objects.order_by('date_added').reverse()[:5] 

funktioniert gut, aber jedoch wenn ich den order_by Code mit einem Filter verketten ...

currentsources = Current.objects.filter(source__exact='bbc').order_by('date_added') 

warum dies nicht funktioniert nicht? schlechte Syntax vielleicht, oder verstehe ich einfach nicht, wie das funktionieren soll?

+0

Was funktioniert nicht? Die Syntax sieht korrekt aus. Gibt es einen Fehler, produziert er falsche Daten, bekommt er überhaupt etwas? –

+0

Siehe meine aktualisierte Antwort. –

Antwort

1

Wenn es keine Current Objekte mit einer source von "bbc" gibt, dann erhalten Sie natürlich eine leere Ergebnismenge. Ist das, was Sie mit nicht funktioniert? Wenn nicht, poste bitte die Ergebnisse, die du bekommst.

Update: Eine weitere Sache, um zu versuchen: Feuer

manage.py shell 

und dann in der Schale bewerten queryset, die das Problem gibt.

currentsources = Current.objects.filter(source__exact='bbc').order_by('date_added') 

Dann gehen Sie wie folgt vor:

from django.db.import connection 
connection.queries 

und dies wird die rohe SQL zeigen, die für die queryset ausgeführt wird. Es sollte helfen, das Problem zu lösen.

+0

hi Vinay, Es gibt die Objekte zurück, aber sie sind nicht nach Datum sortiert. in der Tat, ich kann nicht sagen, wie sie bestellt sind - scheint zufällig (obwohl, ich bin mir sicher, es ist nicht.) –

+0

Hallo Vinay UND Daniel. –

+0

Also genau welcher Typ ist die 'date_added' Eigenschaft deines' Current' Modells? –

0

Eine Sache, die ich in Ihrer Anfrage bemerkt: wenn Sie versuchen, die Reihenfolge umzukehren, so dass neuere Daten zuerst erscheinen, können Sie die folgende Syntax verwenden würde:

currentlinks = Current.objects.order_by (‘ -date_added ')

Das Minuszeichen vorne auf dem Feld kehrt die Reihenfolge um. Es entspricht in etwa der folgenden Syntax in SQL:

SELECT * FROM current_links ORDER BY DATE_ADDED DESC

Die order_by() sollte funktionieren, wenn Sie es nach einem Filter() -Kette, vorausgesetzt, dass der Filter() gültig ist .