/ / Siguiendo el envío del formulario django, redirigir a la página usando pk recién creado - django, django-views

Siguiendo el envío del formulario django, redirigir a la página usando pk recién creado - django, django-views

Estoy tratando de redirigir al usuario para editar detallesde una tarea tras otra, pero estoy teniendo problemas para redirigir a una página basada en el pk recién creado. Cada vista funciona sin la línea HttpResponseRedirect de retorno. También he intentado arge = (instance.id) y kwargs = (instance.id) para la variable.

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"),

Respuestas

1 para la respuesta № 1
return HttpResponseRedirect(reverse("task_values", kwargs={"task_id": instance.id}))

También tenga en cuenta que no necesita guardar la tarea dos veces.

Editar De acuerdo, hay otro problema. No le han dado nombres específicos a sus URL, lo que significa que la única forma de identificarlos es pasar el nombre de vista completo:

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

O, mejor, usa el url() función para nombrar su URL:

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

y puedes usar la versión original que te di arriba.

Tenga en cuenta que el error no le está diciendo que va a enter/<id>/, solo que en esa vista está intentando crear la URL inversa para la redirección y falla.