2016-05-06 105 views
0

我是django的新手,我非常喜歡它,尤其是它的漂亮社區。這裏是我的問題:我有這個模型django:Language-aware Drop-down

class Nationality(models.Model): 
    nationality_fr = models.CharField(max_length=50) 
    nationality_en = models.CharField(max_length=50) 
    show_flag = models.BooleanField() 
    display_order = models.PositiveSmallIntegerField() 

    def __str__(self): 
    return self.nationality_fr 

我想改變__ STR __函數返回nationality_fr如果選擇的語言(用戶)是「FR」和language_en如果所選語言「恩」。我需要這個的原因是因爲我顯示了一個選擇國籍的下拉菜單供用戶選擇,他/她應該用他/她的語言看到選擇。什麼是最好的方式來處理這個問題?

注:我知道有一個很好的應用程序的國家,但我應該能夠做到這一點,除了這個國家的情況以外的其他情況。

+0

只是出於好奇,你有什麼實際存儲在這兩個領域的國籍? (我想避免的是爲什麼你不使用國際化方法?) – Sayse

+0

嗨@Sayse,很高興再次聽到你的聲音。我將用英文和法文存儲國家名稱。請詳細說明如何使用i18n方法來解決這個問題? –

回答

0

經過一番研究,我找到了解決方案:django.utils.translation.get_language()。它返回當前線程使用的語言和u可以用它在模型中,像這樣:

from django.utils import translation 

@property 
def nationality(self): 
    lang = translation.get_language() 
    if lang == "fr": 
     return self.nationality_fr 
    else: 
     return self.nationality_en 

def __str__(self): 
    return self.nationality 
0

最簡單的方法是get_language(),它會根據settings.LANGUAGE_CODE設置告訴您當前線程中的語言。

from django.utils.translation import get_language 

def __str__(self): 
    if get_language().startswith('fr'): 
     return self.nationality_fr 
    else: 
     return self.nationality_en 

如果讓Django的設置語言動態的基礎上,要求參數,如URL字符串或瀏覽器標題,可以使用django.utils.translation.get_language_from_request代替(因爲Django的1.8)。 See docs here

+0

是的,我想使用請求中的語言而不是來自設置。現在的問題是如何從模型定義中獲得請求? –