Почему url в django не читает первичный ключ, а просто читает его как строку?

def lead_update(request,pk) :
lead = Lead.objects.get(id=pk)
form = LeadForm()
if request.method == "POST" :
    form = LeadForm(request.POST)
    if form.is_valid() :
        first_name = form.cleaned_data['first_name']
        last_name = form.cleaned_data['last_name']
        age = form.cleaned_data['age']
        lead.first_name = first_name
        lead.last_name = last_name
        lead.age = age
        lead.save()
        return redirect("/leads/{{ lead.pk }}/") # the problem

context = {
    "form" : form,
    "lead" : lead
}
return render(request,"leads/lead_update.html",context)

в отладке : отображается Текущий путь, leads/{{ lead.pk }}/, не соответствует ни одному из этих путей.

{{}} используется внутри шаблонов, а не в views.py

Если ваш urls.py предназначен, например, для

path('lead/<pk>/', views.lead_update, name='lead_update')

Тогда вы можете перенаправить как

return redirect('lead_update', pk=lead.pk)

Если вы хотите использовать абсолютный и жестко закодированный url, что здесь не рекомендуется:

return redirect(f"/leads/{ lead.pk }/") # only single curly brackets

Вместо этого используйте reverse():

from django.http import HttpResponseRedirect
from django.urls import reverse


return HttpResponseRedirect(reverse('lead-update', args=[lead.pk]))

Имя url, как предложил пользователь 8193706, Urls.py:

path('lead/<pk>/', views.lead_update', name='lead_update')
Вернуться на верх