2011-06-25 11 views
1

我在一個頁面上使用兩種表單(我有我的理由)。他們不是模特形式。我試圖通過使用前綴來驗證它們。我在這裏找到它:Proper way to handle multiple forms on one page in Django 但是,當我嘗試獲取cleared_data時,我得到關鍵錯誤。 下面是我的一些代碼:在帶有前綴的表單上的Django中的關鍵錯誤

add_form = AbsenceTypeForm(request.POST, prefix = 'atype') 
if add_form.is_valid(): 
    absence_type = AbsenceType(
     client = client_instance, 
     name = add_form.cleaned_data['type_name'], 
     gainful = add_form.cleaned_data['gainful'], 
    ) 
    absence_type.save() 

我也得到KeyError異常的TYPE_NAME。我試圖添加cleaned_data['atype-type_name'] - 沒有任何幫助。

+0

嘗試'cleaned_data.get( '富')' – chandsie

+0

嘗試打印request.POST,看看你有什麼值。我確信你會看到你想要通過密鑰引用的集合。 – Brandon

回答

0

也許您在您發佈的表單中留下了空的type_name; cleaned_data只包含非空表單字段的鍵。

1

將clean_data轉儲到某個屏幕或文件 - 只是爲了檢查其獲取的密鑰?調試器還應該顯示當地人的字典。我想這可能是丟失/拼寫錯誤的前綴或表單字段名稱。

順便說一句,我同意使用.get()更安全(即使它看起來表單驗證應已由is_valid()處理,但是您可能決定將該字段更改爲非強制性的在未來和那麼這段代碼錯誤),所以:

name = add_form.cleaned_data.get('type_name',None), 
gainful = add_form.cleaned_data.get('gainful',None), 

if name and gainful: 
    pass 
    #rest of the code 
+0

謝謝。現在好多了。 – Kroitus