2009-03-18 6 views
0

私のeval構文が正しくありません。つまり、カテゴリごとに、category_taskという名前のModelChoiceFieldを出力したいと思います。カテゴリが「楽しい」場合は、ラジオ選択フィールド 「fun_tasks」が出力されます。Django Python:実行時に複数のフィールドの評価構文が生成される

categories = Category.objects.all() 

for category in categories: 
    eval(category)_tasks = form.ModelChoiceField(
     queryset   = Task.objects.filter(method__category=category), 
     widget   = RadioSelect 
    ) 

答えて

4

「evalが悪である。」

OKあなた自身があなたを停止すべきはevalを書く見つけるので、もし、それがその用途を持っていますが、(どの言語でも)evalの使用量の90%は誤認であると極端な疑惑であなたがやっていることを調べてください。あなたはevalのではなく、幹部を使用する必要があると思いますので、

eval(category)_tasks = x 

あなたは割り当てを行っている場合は、それは、表現ではなく、声明です:

exec category+'_tasks= x' 

しかし幹部だけではevalとして悪のようです!

あなたが解析/評価するPythonコードすることなく、Pythonで変数を書くことができますし)

locals()[category+'_tasks']= x 

か、あなたはグローバル変数の代わりに、現在のスコープ内の1つを書きたい場合は、(地元の人々を交換グローバル()。

これはevalを/ execのよりも良いですが、それはまだかなりのコード-臭いです。ほとんどの場合、完全に動的に名前が付けられた変数ルックアップは通常、非常にきれいである:

catlookup= {} 
catlookup[category]= x 

より文脈なしに、それはあなたのケースのために最善のものを言うのは難しいのですが。

関連する問題