Ошибка значения в / edit / 3 Просмотр main_panel.views.edit не вернул объект HttpResponse. Вместо этого он вернул None

#python #django

#python #django

Вопрос:

Я пытаюсь добавить кнопку редактирования в свой проект и выдает ошибку.

Следующий код является моим views.py файл.

 def edit(request, list_id):
if request.method == 'POST':
    item = List.objects.get(pk=list_id)
    form = ListForm(request.POST or None, instance=item)

    if form.is_valid():
        form.save()
        return redirect('home')
else:
    item = List.objects.get(pk=list_id)
    return render(request, 'main_panel/edit.html', {'item': item})
  

Это мой edit.html,

 {% extends 'main_panel/base.html' %}

{% block content %}

 {% if item  %}
<form class="form-inline my-2 my-lg-0" method="POST">
       {% csrf_token %}


    <input type="search" value="{{ item.name }}" name="name">
    <input type="search" value="{{ item.choice_field }}" name="choice_field">
    <input type="search" value="{{ item.product }}" name="product">
    <input type="search" value="{{ item.avans }}" name="avans">
    <input type="search" value="{{ item.total_price }}" name="total_price">
    <input type="search" value="{{ item.status }}" name="status">

    <button type="submit">Kaydet</button>
</form>
{% endif %}
{% endblock %}
  

Это мой urls.py,

 from django.urls import path
from . import views

urlpatterns = [
  path('', views.home, name='home'),
  path('add/', views.add, name='add'),
  path('delete/<list_id>', views.delete, name='delete'),
  path('edit/<list_id>', views.edit, name='edit')
]
  

который выдает мне следующую ошибку:

Ошибка значения в / edit / 3 Просмотр main_panel.views.edit не вернул объект HttpResponse. Вместо этого он вернул None.

Когда я нажимаю кнопку отправить после редактирования своих данных, это выдает ошибку. Ценю любую помощь. Спасибо.

Ответ №1:

Если ваше представление получило запрос POST и форма недействительна, функция не выполняет явный оператор return и возвращает значение по умолчанию None .

Я предлагаю вам взглянуть на этот пример:https://docs.djangoproject.com/en/2.1/topics/forms/#the-view

Посмотрите, как последняя строка является оператором возврата по умолчанию для запросов GET и недействительных запросов POST.

Ответ №2:

Как упоминалось mg, если form.is_valid() это не true , это не будет неявно return что-либо. это оставит вас с None

 def edit(request, list_id):
  if request.method == 'POST':
  item = List.objects.get(pk=list_id)
  form = ListForm(request.POST or None, instance=item)

  if form.is_valid():
     form.save()
     return redirect('home')
  return redirect('error_page') # or basically any other return maybe HttpResponse