2015-12-03 55 views
0

在我的Django應用程序,我有三種形式:在view.pyDjango的cleaned_data KeyError異常

class RoomsForm(forms.Form): 
     rooms = forms.IntegerField(min_value=1) 

class TouristsForm(forms.Form): 
     adult = forms.IntegerField(label=(u'Adults'), min_value=1, initial=1, widget = forms.HiddenInput) 
     children = forms.IntegerField(label=(u'Children'), min_value=1, required=False, widget = forms.HiddenInput) 

class ChildrenAgeForm(forms.Form): 
     children_age = forms.IntegerField(min_value=2, max_value=10, required=False, widget = forms.HiddenInput) 

我試圖清理數據:

def RoomsForm(request): 
     TouristsFormSet = formset_factory(TouristsForm) 
     ChildrenAgeFormSet = formset_factory(ChildrenAgeForm) 
     if request.method == 'POST': 
       rooms_form = RoomsForm(request.POST, prefix='rooms_form') 
       tourists_formset = TouristsFormSet(request.POST, prefix='tourists') 
       childrenage_formset = ChildrenAgeFormSet(request.POST, prefix='childrenage') 
       if rooms_form.is_valid() and tourists_formset.is_valid() or childrenage_formset.is_valid(): 
         rooms = rooms_form.cleaned_data['rooms'] 

         for i in range(0, tourists_formset.total_form_count()): 
           tourists_form = tourists_formset.forms[i] 
           print tourists_form.cleaned_data 

但它總是上升的錯誤KeyError異常在/間/ 「房間」。 有人可以幫我嗎?

+1

你的'if'邏輯的最後一部分是'or'嗎?在我看來,這需要是一個'和'。 –

回答

3

在這一行中,您使用的是or而不是and,因此不保證rooms_form有效。

if rooms_form.is_valid() and tourists_formset.is_valid() or childrenage_formset.is_valid(): 

rooms_form是無效的,roomrooms_form.cleaned_data,讓您得到KeyError

+0

謝謝你的回答,但是當我使用'和'而不是'或'我有另一個錯誤,也許你可以幫助我。所以該領域'children_age'應apper –

+0

請更新您的問題與更多細節。目前還不清楚你的意思。 – Alasdair

+0

對不起,我以前的評論,我的孩子擊中輸入按鈕。當我使用'和'而不是'或'我有另一個問題。也許你可以幫助我。所以我的情況是:我想創建帶有'room'字段的表單,它是整數字段。根據這個字段的值,應該創建相同數量的另一個字段'adult'和'children',並且根據字段'children',應該創建相同數量的字段'children_age'。但是,當我離開'孩子'號碼空白它上升「所有領域要求」。希望你瞭解我的問題。 –