2011-12-19 23 views
0

我想這樣做在Django:動態類

class MyForm(forms.Form): 
    items = Items.objects.all() 
    for item in items: 
     # How does this part work? 
     exec(item.name) = forms.BooleanField() 

的目標是創建一個表單字段爲每個項目從數據庫查詢返回。所以,如果我從查詢中返回10個項目,那麼這個類將有10個變量,每個變量都以返回的項目命名。

這在理論上似乎是可行的,但這裏有一些危險嗎?數據庫中的項目不是用戶生成的。

回答

2

可以動態修改窗體但是請你:

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     for item in Item.objects.all(): 
       self.fields[item.name] = forms.BooleanField() 

我想危險是,如果數據庫狀態的變化,而一個用戶提交表單,而新形式新領域初始化它以前的形式沒有。

+0

工程就像一個魅力,謝謝。我發佈後,我也發現這篇文章,真的進入細節:http://jacobian.org/writing/dynamic-form-generation/ – mlissner 2011-12-19 04:10:56

0

如果我是你,我會用django formsets。

爲什麼formset在這裏不是一個選項?

+0

其實,我從來沒有使用過formset。 Django是巨大的。希望我現在不需要再學習它的另一部分。 – mlissner 2011-12-20 19:45:00