41 votes

Django : Ordre par position ignorant les NULL

J'ai un problème avec l'ordre des querysets de django.

Mon modèle contient un champ nommé position (a Champ de petits nombres positifs ), que j'aimerais utiliser pour ordonner les résultats des requêtes.

J'utilise order_by('position') qui fonctionne très bien.

Problème : mon position est nullable ( null=True, blank=True ), car je ne veux pas spécifier une position pour toutes les 50000 instances de mon modèle :(

Lorsque certaines instances ont une "position" NULL, order_by les renvoie en haut de la liste : j'aimerais qu'ils soient à la fin...

Dans RAW SQL, j'avais l'habitude d'écrire des choses comme " IF(position IS NULL or position='', 1, 0) "(voir http://www.shawnolson.net/a/730/mysql-sort-order-with-null.html ) : est-il possible d'obtenir le même résultat en utilisant Django, sans écrire du SQL brut ?

Merci beaucoup !

1voto

QuerySet.extra() peut être utilisé pour injecter des expressions dans la requête et les ordonner.

0 votes

Elle est désormais obsolète.

0 votes

.extra() n'est pas déprécié. Mais elle pourrait l'être à l'avenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X