2013-07-29 90 views
0

我有一個Django窗體,我試圖添加CAPTCHA支持。但是,這需要我將request.session傳遞給表單。爲了做到這一點,我將這個構造函數添加到表單中:Django窗體與__init__不清潔字段

def __init__(self, request=None, *args, **kwargs): 
    super(RegistrationForm, self).__init__(*args, **kwargs) 
    self.request = request 

然後通過將請求對象傳遞給它來實例化RegistrationForm。但是,在提交表單時,它無法清除任何字段。它只是未通過驗證並將空白字段傳遞迴模板。這是註冊碼失敗:

if request.method == 'POST': 
    form = RegistrationForm(request.POST) 
    if form.is_valid(): 
     ...do registration... 
    else: 
     return render(request, 'template.htm', {'form': form}) 

無論我放在字段中,它永遠不會驗證。事實上,它甚至看起來並不像清理田野。點擊註冊按鈕後,我會返回一個新的空白表格,沒有錯誤,沒有任何東西。

任何想法?

+0

在else塊中,您可以放置​​'form.errors'並查看錯誤是什麼? – karthikr

+0

你需要自己做一些調試;除非這是一個已知的問題,否則用這裏提供的信息來回答並不容易。將打印語句放在這裏和那裏,看看你的表單發生了什麼。 – asermax

回答

2

根據您發佈的代碼,看起來好像您將request.POST轉換爲您的RegistrationFormrequest參數。即你正在做的相當於:

form = RegistrationForm(request=request.POST) 

你真正想要做的是什麼:

form = RegistrationForm(request=request, data=request.POST) 

試試這個,看看它是否適合你。

+0

就是這樣。謝謝! –