ValueError at / edit / 3 Представление main_panel.views.edit не возвращало объект HttpResponse.Вместо этого он вернулся - PullRequest
0 голосов
/ 10 марта 2019

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

Следующий код - мой 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')
]

, которая дает мне следующую ошибку:

ValueError at / edit / 3 Представление main_panel.views.edit не возвращало объект HttpResponse. Вместо этого он вернул None.

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

Ответы [ 2 ]

1 голос
/ 10 марта 2019

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

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

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

0 голосов
/ 10 марта 2019

Как упомянуто 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...