2010-05-17 7 views
0

J'ai vu des réponses aux deux moitiés de ma question, mais je ne sais pas comment marier les deux.Django get_FOO_display et distinct()

J'ai un modèle de livre, et un modèle traduit.

Le translatedBook a un langage mis en place comme choix de modèle de la manière habituelle:

LANGUAGES = ( 
(u'it', u'Italian'), 
(u'ja', u'Japanese'), 
(u'es', u'Spanish'), 
(u'zh-cn', u'Simplified Chinese'), 
(u'zh-tw', u'Traditional Chinese'), 
(u'fr', u'French'), 
(u'el', u'Greek'), 
(u'ar', u'Arabic'), 
(u'bg', u'Bulgarian'), 
(u'bn', u'Bengali'), 

etc

Je sais que pour obtenir « italien » je dois faire translatedBook.get_language_display sur un objet du livre .

Mais comment puis-je obtenir une liste de langues distinctes dans leur format long?

J'ai essayé:

lang_avail = TargetText.objects.values('language').distinct().order_by('language') 

lang_avail = TargetText.objects.distinct().order_by('language').values('language'). 

lang_avail = TargetText.objects.all().distinct('language').order_by('language') 

, mais je ne peux pas sembler obtenir ce que je veux - ce qui est une liste comme:

« anglais, italien, chinois simplifié, espagnol »

la lang_avail finale ci-dessus n'a pas retourné la liste des 5, il est revenu la liste des 355 (c.-à-# de livres) avec de multiples répétitions ....

- EDIT -

La réponse de Daniel m'a presque amené là-bas - en fait, il y a une erreur «les dicts sont imputables». Merci à Axiak sur l'irc django, nous utilisons la solution de Daniel à la place avec cette ligne:

langs = TargetText.objects.values_list('language', flat=True).distinct().order_by('language') 

et il fonctionne.

Répondre

0

Il n'y a pas de manière intégrée. Vous pouvez faire quelque chose comme ceci:

lang_dict = dict(LANGUAGES) 
langs = TargetText.objects.values('language').distinct().order_by('language') 
long_langs = [lang_dict[lang] for lang in langs] 

qui fait tout simplement un dictionnaire sur les choix et LANGUAGE recherche alors chaque ID de langue.