2010-07-16 80 views
0

我有這樣的工作代碼創建django表單時,'initial'參數必須首先出現?

f = SomeForm(request.POST) 

當我試圖把它修改成

f = SomeForm(request.POST, initial={'spam', 4}) 

它沒有工作,在「初始」 wasnt選擇(「垃圾郵件」是ModelChoiceField),但是當我嘗試

f = SomeForm(initial={'spam', 4}) 

它的工作(選定的值是正確的)。我在這裏錯過了什麼嗎?如果它的事項,繼承人什麼的的init方法看起來像

def __init__(self, *a, **ka): 
    super(SomeForm, self).__init__(*a, **ka) 
    ....#more codes 

有沒有一種方法,使初始數據的工作,而不必刪除第一個參數?謝謝

編輯:它不必是「初始」,只要我可以在ModelChoiceField上放一些預定義的值。條件=有一個request.POST,但表格尚未提交(帖子來自另一頁)

回答

1

原來我只需要改變數據屬性。使用複製方法使QueryDict可變

post = request.POST.copy() 

f = SomeForm(post) 
f.data['spam'] = 4 
0

如果表格已發佈,則不需要通過initial。檢查request.method並相應地實例化表單。

+0

謝謝,但POST來自另一頁通過行動帖子,所以表格尚未發佈尚未。最好的方法是什麼? – kusut 2010-07-16 12:48:14

+0

您可以將POST作爲初始值傳遞:'SomeForm(initial = request.POST)'或者只是在傳遞數據之前修改'request.POST',如果不是request.POST.get(「spam」):request。 POST [「垃圾郵件」] = 4' – cji 2010-07-16 13:00:51

相關問題