Я создаю веб-приложение Django для дополнительных платежей, таких как Shift allowance on call и т.д., я получаю ошибку HttpResponse
Я создаю веб-приложение Django для дополнительных платежей, таких как надбавка за смену по вызову и т.д., я создал несколько приложений под одно и то же, shift является одним из приложений, В этом приложении пользователь будет предоставлять данные смены и менеджер будет утверждать их, здесь я получаю ошибку, когда менеджер пытается утвердить данные смены пользователя
ValueError at /shift/6/
Представление shift.views.update_status не вернуло объект HttpResponse. Вместо этого оно вернуло None.
Метод запроса: POST
URL запроса: http://127.0.0.1:8000/shift/6/
Версия Django: 3.2.5
Тип исключения: ValueError
Значение исключения:
Представление shift.views.update_status не вернуло объект HttpResponse. Вместо этого оно вернуло None.
Расположение исключения: C:\Users\vikasdange\Anaconda3\lib\site-packages\django\core\handlers\base.py, line 309, in check_response
Python Executable: C:\Users\vikasdange\Anaconda3\python.exe
Версия Python: 3.9.7
Python Path:
['C:\Users\vikasdange\django\additional_payments',
'C:\Users\vikasdange\Anaconda3\python39.zip',
'C:\Users\vikasdange\Anaconda3\DLLs',
'C:\Users\vikasdange\Anaconda3\lib',
'C:\Users\vikasdange\Anaconda3',
'C:\Users\vikasdange\Anaconda3\lib\site-packages',
'C:\Users\vikasdange\Anaconda3\lib\site-packages\locket-0.2.1-py3.9.egg',
'C:\Users\vikasdange\Anaconda3\lib\site-packages\win32',
'C:\Users\vikasdange\Anaconda3\lib\site-packages\win32\lib',
'C:\Users\vikasdange\Anaconda3\lib\site-packages\Pythonwin'].
Время сервера: Sat, 23 Jul 2022 12:38:22 +0000
имя проекта additional_payments
Проект additional_payments urls.py файл
urlpatterns = [
path('', include('login.urls')),
path('admin/', admin.site.urls),
path('ot/', include('ot.urls')),
path('oncall/', include('oncall.urls')),
path('shift/', include('shift.urls')),
path('accounts/', include('accounts.urls')),
]
app shift urls.py file
urlpatterns = [
path("shift", views.shift,name="shift"),
path("<int:id>/", views.update_status,name="update_status"),
path("shift_details/", views.shift_details,name="shift_details"),
]
app shift views.py file
def shift_details(request):
sdetails = Shift.objects.all()
return render(request, 'shift_details.html', {'details':sdetails})
def update_status(request, id):
if request.method == 'POST':
ar_status = Shift.objects.get(pk=id)
fm = shiftforms(request.POST,ar_status)
if fm.is_valid():
fm.save()
return redirect('/')
else:
ar_status=Shift.objects.get(id=id)
fm = shiftforms(instance=ar_status)
return render(request, "update.html", {"Shift":ar_status})
файлupdate.html
{% extends 'base.html' %}
{% block content %}
<h4>Approve Reject Request</h4>
<form action="" method="post">
{% csrf_token %}
{{form.as_p}}
<table border="1">
<tr>
<td>Employee ID</td>
<td><input type="text" name="id" value="{{Shift.id}}" readonly></td>
</tr>
<tr>
<td>Approval Status</td>
<td><input type="text" name="status" value="{{Shift.status}}" ></td>
</tr>
</table>
<input type="submit" value="Update">
<a href="{% url 'shift_details' %}">Back To Home</a>
</form>
{% endblock content %}
Других вариантов нет, если форма не валидна. Если форма не действительна, то должен быть выведен шаблон с ошибками формы типа (и проверено, существует ли объект ar_status) :
def update_status(request, id):
try:
ar_status = Shift.objects.get(pk=id)
except ObjectDoesNotExist:
print('There is no shift object with this id')
return redirect('/')
if request.method == 'POST':
fm = shiftforms(request.POST,ar_status)
if fm.is_valid():
fm.save()
return redirect('/')
else:
print(fm.errors)
else:
ar_status=Shift.objects.get(id=id)
fm = shiftforms(instance=ar_status)
return render(request, "update.html", {"Shift":ar_status, "form": fm})
обратите внимание, что ретунь с рендерингом больше не является частью другого утверждения.