Tenir compte de ce modèle exemple:Trier par nom d'affichage au lieu de la valeur réelle
MODEL_CHOICES = ( (u "SPAM", u "Spam"), (u "XOUP", u "Eggsoup") , )
(snip)
type = models.CharField (MAX_LENGTH = 4, choix = MODEL_CHOICES)
(La mise en œuvre effective est spécifique au domaine et non-anglais, donc cet échantillon doit faire.)
Lors de la construction ma requête, je voudrais trier les résultats par ce champ de type, et le présent les résultats à l'utilisateur. Naturellement, je voudrais trier par le nom d'affichage de ce champ.
Quelque chose le long des lignes de:.
documents = MyModel.objects.filter (...) order_by ("type")
Cependant, seule [query-set].order_by([field])
permet le tri par nom de domaine , ce qui entraînera SPAM < XOUP (à la machine) même si Eggsoup < Spam (au lecteur humain).
Considérez cet ensemble de cas classés par type:
Nom | Type
obj1 | SPAM
obj2 | SPAM
obj3 | SPAM
obj4 | XOUP
obj5 | XOUP
Mais ceci est l'ordre que l'utilisateur verra, à savoir l'utilisateur verra le nom d'affichage, pas la valeur du champ interne de la colonne de type:
Nom | Type
obj1 | Spam
obj2 | Spam
obj3 | Spam
obj4 | Eggsoup
obj5 | Eggsoup
Qui, aux yeux de l'utilisateur humain, n'est pas trié correctement.
Existe-t-il une fonctionnalité dans Django qui permet le tri par nom d'affichage? Ou un moyen d'accomplir cela "manuellement"?(Renommer les choix afin que le nom d'affichage ait le même ordre que les valeurs réelles n'est pas une option.)
Merci. L'utilisation de l'opérateur semble chouette, je n'étais pas au courant. – nikola