2017-11-03 57 views
1

有人告訴我,這是不好的形式使用當地人()在Python中動態創建變量。但是,我正在寫(使用Django和鶺鴒)一類的,我真的需要這些東西在類字典中去,又名class聲明的局部變量,而不是在一個單獨的數據結構:更好的辦法從環比當地人創造一流的字典項()

class BlogPage(Page): 
    for language in languages: 
     locals()['body_' + language] = RichTextField(blank=True) 

我不認爲我可以setattr類語句後設置這些,或者說,是因爲Django的元類的處理將已經被隨後發生的事情。

有沒有更好的方法?

+0

使用字典或許。 –

+0

...還好,一類說法,特別是如果確實元類的任何重要的工作(這似乎相當有可能在這裏),'當地人()'實際上可能是合理的(並可能實際工作,不像'修改當地人()'在一個函數中)。 – user2357112

+1

更好的方法**是不要這樣做,並使用某種容器**。 –

回答

1

與具有不同的語言模型的屬性的問題是,改變語言需要遷移數據庫。如果你能提供幫助,這不是你想做的事情。

解決這個正確的方法是使用Google地圖頁面,並以適當的內容的語言都有一個單獨的模型。

class BlogPageTranslation(model.Model): 
    language = TextField() 
    blogpage = ForeignKey(BlogPage) 
    content = RichTextField() 

然後查詢時,頁面的外觀與所需的語言,一個健全的默認翻譯,然後採取相應的行。

xlatcontents = BlogPageTranslation.filter(blogpage=Page, 
    language__in=[someLanguage, 'en']) 
somethingsomething(xlatcontents, someLanguage)