2017-11-03 7 views
1

Pythonで変数を動的に作成するためにlocals()を使うのは悪いことだと言われました。しかし、私は(ジャンゴとセキレイを使用して)クラスを書いている、と私は本当にclass文のローカル変数別名ではなく、別のデータ構造では、クラスのdictに行くためにこれらの事を必要とします:locals()よりもループからクラスdictエントリを作成する方がいい

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

私はsetattrというクラスのステートメントの後にDjangoのメタクラス処理が既に行われているので、どちらも設定できないと思います。

良い方法がありますか?

+0

おそらく辞書を使用してください。 –

+0

...クラスステートメントの場合、特にメタクラスが重要な仕事をしている場合には、 'locals()'は実際に正当化されるかもしれません( 'locals()'関数内で)。 – user2357112

+1

もっと良い方法は、これを一切やっておらず、何らかのコンテナを使うことです**。 –

答えて

1

異なる言語をモデルの属性にすることの問題は、言語を変更するにはデータベースを移行する必要があるということです。これは、あなたがそれを手伝うことができれば、あなたがやりたいことではありません。

これを解決する正しい方法は、ページと言語を適切なコンテンツにマッピングする別のモデルを使用することです。

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

希望の言語と正気のデフォルトと翻訳のページの外観を照会し、適切な行を取ります。

xlatcontents = BlogPageTranslation.filter(blogpage=Page, 
    language__in=[someLanguage, 'en']) 
somethingsomething(xlatcontents, someLanguage) 
関連する問題