/ / Po przesłaniu formularza Django, przekieruj na stronę przy użyciu nowo utworzonego pk - django, widoków django

Po przesłaniu formularza django przekieruj na stronę przy użyciu nowo utworzonego pk - django, widoki django

Próbuję przekierować użytkownika, aby edytować szczegółyzadania po przesłaniu zadania, ale mam problemy z przekierowaniem na stronę opartą na nowo utworzonym pliku. Każdy widok działa bez zwracanej linii HttpResponseRedirect. Próbowałem również arge = (instance.id) i kwargs = (instance.id) dla zmiennej.

views.py

...
from django.http import HttpResponseRedirect, HttpResponseServerError, HttpResponseForbidden, Http404, HttpResponse
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response, get_object_or_404,render
...

def new_task(request):
...
...
task.save()
instance = task.save()
return HttpResponseRedirect(reverse("task_values", instance.id))

def task_values(request, task_id):
...

urls.py

from django.conf.urls.defaults import patterns, include, url
from django.http import HttpResponseRedirect
from django.views.generic.simple import direct_to_template

urlpatterns += patterns("core.views_entry",
#Task viewing/editing
(r"^task/(?P<task_id>d+)/$","task_values"),
(r"^enter/$","new_task"),

Odpowiedzi:

1 dla odpowiedzi № 1
return HttpResponseRedirect(reverse("task_values", kwargs={"task_id": instance.id}))

Pamiętaj też, że nie musisz dwukrotnie zapisywać zadania.

Edytować OK, jest inny problem. Nie podano konkretnych nazw adresów URL, co oznacza, że ​​jedynym sposobem ich identyfikacji jest przekazanie w pełni kwalifikowanej nazwy widoku:

reverse("core.views_entry.task_values", kwargs=...)

Lub, lepiej, użyj url() funkcja do nazwania twojego adresu URL:

url(r"^task/(?P<task_id>d+)/$","task_values", name="task_values"),

i możesz użyć oryginalnej wersji, którą podałem powyżej.

Zauważ, że błąd nie mówi ci, że to będzie enter/<id>/, właśnie w tym widoku próbuje utworzyć odwrotny adres URL dla przekierowania i błędu.