2017-11-03 48 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)