Django Return redirect работает для одного представления, но не работает для другого
Я не могу понять, почему это работает в одном случае, но не в другом. Я работаю с django и вывожу в шаблоне django. Единственная разница между представлениями/функциями заключается в том, что во втором случае (тот, который не работает) я обновляю поле временем. Время обновляется, сохраняется в модели и корректно отображает обновленное время. Не работает только перенаправление.
Рабочий код перенаправления-
Шаблон, этот код переводит меня на страницу редактирования. Имя url - "update" -
<td><a href="{% url 'update' i.id %}"><button>Edit</button></a></td>
Форма на dit page-
{% block content %}
<div class="wrapper">
<h1 class="ok">Entry Form</h1>
<form action="" method="POST">
{% csrf_token %}
{{form}}
<input type="submit" value="submit">
</form>
</div>
<br>
{% endblock content %}
url-
path('update_entry/<str:pk>/', views.update, name = "update"),
And views.py-
def update(request, pk):
order=Bank1.objects.get(id=pk)
form = Bank1Form(instance=order)
if request.method == 'POST':
form = Bank1Form(request.POST, instance=order)
if form.is_valid():
form.save()
return redirect('/bank1')
context = {'form':form}
return render(request, 'myapp/entry.html', context)
Теперь вот нерабочий код. Шаблон, строка, которая переводит меня на страницу обновления. Имя url - "update_enter_workout.-
".<td><a href="{% url 'update_enter_workout' i.id %}"><button>Start Time</button></a></td>
Форма на странице редактирования. Я не стал добавлять всю форму, так как мне нужно только обновить время на этой странице. Только кнопка отправки.
{% block content %}
<a href="{% url 'index'%}"><Button>Close this page and go to Home</Button></a>
<div class="wrapper">
<h1 class="ok">Start/End the set now?</h1>
<form action="" method="post">
{% csrf_token %}
<input type="submit" value="YES!">
</form>
</div>
{% endblock content %}
url-
path('update_enter_workout/<str:pk>/', views.update_workout, name='update_enter_workout'),
Views.py-
def update_workout(request, pk):
order=WorkOut.objects.get(id=pk)
form=WorkOutForm(instance=order)
if request.method=='POST':
form=WorkOutForm(request.POST, instance=order)
time=datetime.now().strftime('%H:%M:%S')
WorkOut.objects.filter(id=pk).update(start=time)
if form.is_valid():
form.save()
return redirect('/bank1')
context={'form':form}
return render(request, 'myapp/enter_workout.html', context)
Как видите, они написаны одинаково, но во втором случае редирект не работает. Есть идеи, что можно изменить. Это так просто, даже не смог найти опечатку или простую ошибку вроде этой.
Есть советы?
Вы принимаете str
для полей id? Первичные ключи являются целыми числами, а не строками. Вам нужно привести к int конвертер путей:
Вместо:
path('update_enter_workout/<str:pk>/', views.update_workout, name='update_enter_workout'),
Использование:
path('update_enter_workout/<int:pk>/', views.update_workout, name='update_enter_workout'),