Django View не возвращает httpresponse - PullRequest
0 голосов
/ 01 мая 2018

У меня есть следующий код для обработки простой формы, мой взгляд не отправляет ответ http.

Я не могу понять, что не так с моим кодом ..

def novo_material(request):
current_page='material'
if request.method =='POST':
    form = SystemInventoryUpdate(request.POST)
    if form.is_valid():
        name=form.cleaned_data['name']
        qty=form.cleaned_data['qty']
        unit=form.cleaned_data['unit']
        t= NewMaterial(name=name,qty=qty,unit=unit)
        t.save()
        return HttpResponseRedirect(reverse('material'))
else:
    form=NewMaterial()
    return render(request,'novo_material.html',{'form':form})

Это поднимает эту ошибку:

The view dashboard.views.novo_material didn't return an HttpResponse object. It returned None instead.

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вы обрабатываете случай, если запрос POST, но вы не обрабатывали условие (внутреннее условие if-else), что форма недействительна .

 if form.is_valid():
        name=form.cleaned_data['name']
        qty=form.cleaned_data['qty']
        unit=form.cleaned_data['unit']
        t= NewMaterial(name=name,qty=qty,unit=unit)
        t.save()
        return HttpResponseRedirect(reverse('material'))
 else:
    # NEED HANDLE THIS CASE WHEN FORM ISN'T VALID
    # DISPLAY ERRORS/REMINDERS ON THE SAME PAGE, ALARM USER THE INPUT
    # ARE INVLID
0 голосов
/ 01 мая 2018

когда not form.is_valid(), вы не вернете ни одного HttpResponse ...

def novo_material(request):
    current_page='material'
    if request.method =='POST':
        form = SystemInventoryUpdate(request.POST)
        if form.is_valid():
            name=form.cleaned_data['name']
            ''''''
            t= NewMaterial(name=name,qty=qty,unit=unit)
            t.save()
            return HttpResponseRedirect(reverse('material'))

        # No need to add `else` statement, the `return HttpResponseRedirect` above stops the `if`
        # when form is invalid, it will jump to return render, with form validations generated by Django


    else:
        form=NewMaterial()
    return render(request,'novo_material.html',{'form':form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...