2010-02-10 122 views
18

我在表單中有一個動態表單。當我實例化表單時,如何從我的視圖中傳遞參數?將參數傳遞給django中的動態表單

喜歡的東西:

form = DynamicForm("some string argument I'm passing to my form") 

這是我的形式有:

class DynamicForm(Form): 
def __init__(self, *args, **kwargs): 
    super(DynamicForm, self).__init__(*args, **kwargs) 
    for item in range(5): 
     self.fields['test_field_%d' % item] = CharField(max_length=255) 

回答

44

其添加爲關鍵字的說法,說這就是所謂的my_arg。在調用super()之前,請確保pop()關鍵字arg,因爲父類的init方法不接受額外的關鍵字參數。

class DynamicForm(Form): 
    def __init__(self, *args, **kwargs): 
    my_arg = kwargs.pop('my_arg') 
    super(DynamicForm, self).__init__(*args, **kwargs) 
    for item in range(5): 
     self.fields['test_field_%d' % item] = CharField(max_length=255) 

而且當你創建的形式是這樣的:

form = DynamicForm(..., my_arg='value') 
+9

只是一個筆記,學習的時候'** kwargs' ..我總是得到類似的錯誤:'__init __()得到了一個意外的關鍵字參數'my_arg''。你必須在你的構造函數的第一行中'.pop'你的論點,或者至少幫助我解決了我的問題。 – krizajb 2012-06-12 08:42:33

+0

我想能夠繼承DynamicForm,所以我有一個基本的Form類,我可以傳遞自定義參數。你能舉一個例子嗎? – heri0n 2013-01-21 14:47:50

+7

@krizajB實際上,你必須在super()之前使用kwargs.pop,否則基類將接收它不支持的參數。但它不一定是*第一行*。 – thnee 2013-05-28 08:35:23