2009-07-08 7 views
0

J'ai cette ligne de code dans mon point de vue qui me permet d'afficher un groupe d'éléments par date (je l'ai aussi renversé l'ordre pour que les plus récents affiche en premier):comment puis-je commander les résultats d'un filtre de requête?

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

fonctionne très bien, mais cependant , quand je concaténer le code order_by avec un filtre ...

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

pourquoi ne pas cela ne fonctionne pas? Peut-être que je ne comprends pas comment cela est censé fonctionner?

+0

Ce qui ne fonctionne pas? La syntaxe semble correcte. Est-ce que ça donne une erreur, est-ce que ça produit de mauvaises données, est-ce que ça donne quelque chose? –

+0

Voir ma réponse mise à jour. –

Répondre

1

S'il n'y a pas d'objets Current avec un source de "bbc", alors vous obtiendrez bien sûr un jeu de résultats vide. Est-ce que vous voulez dire par ne fonctionne pas? Si non, s'il vous plaît poster les résultats que vous obtenez.

Mise à jour: Encore une chose à essayer: feu vers le haut

manage.py shell 

puis dans la coquille, évaluer la queryset qui donne le problème.

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

Ensuite, procédez comme suit:

from django.db.import connection 
connection.queries 

et cela montrera SQL brut qui est exécuté pour la queryset. Il devrait aider à la maison sur la question.

+0

salut Vinay, il retourne les objets, mais ils ne sont pas classés par date. en fait, je ne peux pas dire comment ils sont commandés - semble aléatoire (bien que, je suis sûr que ce n'est pas le cas.) –

+0

salut Vinay AND Daniel. –

+0

Alors exactement quel type est la propriété 'date_added' de votre modèle' Current'? –

0

Une chose que j'ai remarqué dans votre requête: si vous essayez d'inverser l'ordre de sorte que les dates les plus récentes apparaissent en premier, vous devez utiliser la syntaxe suivante:

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

Le signe moins en face du champ inverse l'ordre. Il équivaut à peu près à la syntaxe suivante dans SQL:

SELECT * FROM current_links ORDER BY DATE_ADDED DESC

Le order_by() devrait fonctionner si vous enchaînez après un filtre(), à condition que le filtre() est valide .

Questions connexes