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.
答案 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浏览器检测到这种情况并快速停止无限循环。这就是为什么你得到“太多重定向”的错误。