2017-06-14 94 views
0

我是django的新手,我有以下代碼片段。我在這裏要做的是獲取一些表單字段的值,將其與字符串進行比較,如果找到匹配,則將該值保存在不同的模型中。未能將表單的數據保存到不同的模型

def log_name_insert(request): 
    if 'logged_in' in request.session: 
     if request.session['logged_in'] is True: 
      form = LogEntryForm(request.POST or None) 
      phaseform = PhaseNameForm(request.POST or None) 
      testForm = TestTypeForm(request.POST or None) 
      priorityForm = PriorityNameForm(request.POST or None) 
      frequencyForm = FrequencyNameForm(request.POST or None) 
      statusForm = StatusNameForm(request.POST or None) 
      defectSeverityForm = DefectSeverityNameForm(request.POST or None) 
      causeCategoryForm = CauseCategoryNameForm(request.POST or None) 
      leakagePhaseForm = LeakagePhaseNameForm(request.POST or None) 
      testStatusForm = TestStatusNameForm(request.POST or None) 
      # print(form) 
      if form.is_valid() and phaseform.is_valid() and testForm.is_valid() and priorityForm.is_valid() and frequencyForm.is_valid() and defectSeverityForm.is_valid() and causeCategoryForm.is_valid() and leakagePhaseForm.is_valid() and testStatusForm.is_valid() and statusForm.is_valid(): 
       if LogEntry.objects.filter(log_name_add=request.POST['log_name_add']).exists(): 
        print("entry found") 
       else: 
        form.save() 
        print(form.cleaned_data['log_name']) 
        if form.cleaned_data['log_name'] == "Phase": 
         print(form.cleaned_data['log_name']) 
         obj = PhaseList() 
         phaseform.cleaned_data['phase_name'] = form.cleaned_data['log_name_add'] 
         obj.phase_name = phaseform.cleaned_data['phase_name'] 
         obj.save() 
        if form.cleaned_data['log_name'] == "Test Type": 
         obj = TestTypeList() 
         testForm.cleaned_data['test_type'] = form.cleaned_data['log_name_add'] 
         obj.test_type = testForm.cleaned_data['test_type'] 
         obj.save() 
        if form.cleaned_data['log_name'] == "Priority": 
         obj = PriorityList() 
         priorityForm.cleaned_data['priority_name'] = form.cleaned_data['log_name_add'] 
         obj.priority_name = priorityForm.cleaned_data['priority_name'] 
         obj.save() 
        if form.cleaned_data['log_name'] == "Frequency": 
         obj = FrequencyList() 
         frequencyForm.cleaned_data['frequency_name'] = form.cleaned_data['log_name_add'] 
         obj.frequency_name = frequencyForm.cleaned_data['frequency_name'] 
         obj.save() 
        if form.cleaned_data['log_name'] == "Status": 
         obj = StatusList() 
         statusForm.cleaned_data['status_name'] = form.cleaned_data['log_name_add'] 
         obj.status_name = statusForm.cleaned_data['status_name'] 
         obj.save() 
        if form.cleaned_data['log_name'] == "Defect Severity": 
         obj = DefectSeverityList() 
         defectSeverityForm.cleaned_data['defect_severity_name'] = form.cleaned_data['log_name_add'] 
         obj.defect_severity_name = defectSeverityForm.cleaned_data['defect_severity_name'] 
         obj.save() 
        if form.cleaned_data['log_name'] == "Cauese Category": 
         obj = CauseCategoryList() 
         causeCategoryForm.cleaned_data['cause_category_name'] = form.cleaned_data['log_name_add'] 
         obj.cause_category_name = causeCategoryForm.cleaned_data['cause_category_name'] 
         obj.save() 
        if form.cleaned_data['log_name'] == "Leakage Phase": 
         obj = LeakagePhaseList() 
         leakagePhaseForm.cleaned_data['leakage_phase_name'] = form.cleaned_data['log_name_add'] 
         obj.leakage_phase_name = leakagePhaseForm.cleaned_data['leakage_phase_name'] 
         obj.save() 
        if form.cleaned_data['log_name'] == "Test Status": 
         obj = TestStatusList() 
         testStatusForm.cleaned_data['test_status_name'] = form.cleaned_data['log_name_add'] 
         obj.test_status_name = testStatusForm.cleaned_data['test_status_name'] 
         obj.save() 
        messages.success(request, 'Data Saved') 
        return redirect('defectlog:log_name_list') 
      else: 
       messages.error(request, 'Wrong data in form') 
       return redirect('defectlog:log_name_insert') 
     else: 
      return redirect('defectlog:login') 

現在,無論何時我嘗試執行它,我的頁面都會因爲重定向太多而停止加載。是否因爲我一次試圖驗證太多形式?此外,我認爲我正在以錯誤的方式比較這些值。如果我在這裏做錯了任何事,請幫助我。謝謝。

回答

1

第一次執行該視圖時,會使用GET請求加載視圖。其結果是,你創建無作爲第一個參數的所有形式,所以形式是鬆散的和下面的測試

if form.is_valid() and phaseform.is_valid() and [...]: 

是假。然後你進入else分支:

messages.error(request, 'Wrong data in form') 
return redirect('defectlog:log_name_insert') 

所以你返回一個HTTP重定向響應給瀏覽器。您的瀏覽器按照此重定向到相同的視圖,並重新執行相同的代碼,再次,一次又一次地落在相同的重定向。但是你的互聯網瀏覽器檢測到這種情況並迅速停止無限循環。這就是爲什麼你會得到「太多重定向」的錯誤。

相關問題