/ edit / 3处的ValueError视图main_panel.views.edit没有返回HttpResponse对象。它返回None

时间:2019-03-10 11:31:20

标签: 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处的

ValueError       视图main_panel.views.edit没有返回HttpResponse对象。       它返回None。

在编辑数据后单击 submit 按钮时,出现错误。感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

如果您的视图收到POST请求,并且表单无效,则该函数不会执行显式的return语句,并返回默认值None

我建议您看一下以下示例:https://docs.djangoproject.com/en/2.1/topics/forms/#the-view

看看最后一行如何成为GET请求和无效POST请求的默认返回语句。

答案 1 :(得分:0)

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