2010-05-17 2 views
0

Я видел ответы на обе половины моего вопроса, но я не могу понять, как выйти замуж за двоих.Django get_FOO_display and distinct()

У меня есть модель книги и модель переведенного кода.

translatedBook имеет язык сайта создать в качестве модели выбора обычного способа:

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'), 

и т.д.

Я знаю, что, чтобы получить «итальянский» Я должен сделать translatedBook.get_language_display на объекте книги ,

Но как я могу получить список отдельных языков в их длинном формате?

Я пробовал:

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') 

, но я не могу показаться, чтобы получить то, что я хочу, - который представляет собой список, как:

«английский, итальянский, упрощенный китайский, испанский»

окончательный lang_avail перечисленные выше, не возвращает список из 5, он возвратил список 355 (т.е. # книг) с несколькими повторами ....

- EDIT -

Ответ Даниэля почти заставил меня туда - как выясняется, это порождает ошибку «дикты, которые не сотрясаются». Благодаря Axiak на Джанго ИРЦ, мы используем решение Дэниела с этой линией вместо:

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

и она работает.

ответ

0

Существует не встроенный способ. Вы могли бы сделать что-то вроде этого:

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

, который просто делает словарь из самых LANGUAGE вариантов, а затем смотрит на каждый идентификатор языка.

Смежные вопросы