По вашему мнению, у вас есть 3 возможных результата на основе условий if
, но только 2 из них возвращают объект HttpResonse
.В частности, if form.is_valid()
возвращает объект HttpResponse
только в случае выполнения этого условия.Если этого не произойдет, он вернет None
(в основном ничего), потому что нет условия else
или другого запасного варианта.
Вам необходимо добавить условие else в if form.is_valid()
.Более того, вы должны реализовать другой подход, чем обслуживание контента по запросу POST
.Как прокомментировал WillemVanOnsem , ознакомьтесь с шаблоном Post / Redirect / Get .Я заменил return render(...)
экземпляры, где это необходимо для достижения этой цели, но потребуется некоторая настройка для работы, например, заменить имя представления (должно быть определено в вашем файле urls.py
).
def index(request):
if request.method == "POST":
form = ListForm(request.POST or None)
if form.is_valid():
form.save()
all_items = List.objects.all
messages.success(request, ('Task Added'))
# Replaced the render(...) with a redirect instead.
# Replace "index" with the name of the view (if not index)
return HttpResponseRedirect(reverse("index"))
else:
# Added fallback if the form.is_valid() didn't pass
messages.failure(request, ('Failed when saving task'))
return render(request, 'index.html', {'all_items': all_items})
else:
all_items = List.objects.all
return render(request, 'index.html', {'all_items': all_items})