我已经看到了问题的两半答案,但我无法弄清楚如何将两者结合。
我有一个书模型和一个翻译的书模型。
翻译的书籍以通常的方式设置为模型选择:
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'),
等
我知道要获得“意大利语”,我必须在Book对象上翻译Book.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(即书籍数量)的列表,包含多个重复....
- 编辑 -
丹尼尔的回答几乎把我带到了那里 - 事实证明,这引发了“不可避免的错误”。感谢django irc上的Axiak,我们使用Daniel的解决方案:
langs = TargetText.objects.values_list('language', flat=True).distinct().order_by('language')
它有效。
答案 0 :(得分:1)
没有内置方式。你可以这样做:
lang_dict = dict(LANGUAGES)
langs = TargetText.objects.values('language').distinct().order_by('language')
long_langs = [lang_dict[lang] for lang in langs]
它只是从LANGUAGE
选项中创建一个字典,然后查找每个语言ID。