Failing to save form's data to different models

时间:2017-06-14 10:27:24

标签: django python-3.x

I am new to django and I have the following code snippet. What I am trying to do here is get some form field's value, compare it to a string and if matches found then save the value in a different Model.

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')

Now, whenever I try to execute it, my page stops loading because of too many redirections. Is it because I am trying to validate too many forms at a time ? Also I think I am comparing the values in a wrong way. Please help me if I am doing anything wrong here. Thanks.

1 个答案:

答案 0 :(得分:1)

第一次执行视图时,使用GET请求加载它。因此,您使用None作为第一个参数创建所有表单,因此表单是未绑定的,并且是以下测试

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

是假的。然后你进入else分支:

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

因此您将HTTP重定向响应返回给浏览器。您的浏览器遵循此重定向到同一视图,并重新执行相同的代码,再次,再次,同样重定向到同一重定向。但是,您的Internet浏览器检测到这种情况并快速停止无限循环。这就是为什么你得到“太多重定向”的错误。