#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