在django表单提交后,使用新创建的pk重定向到页面



我试图将用户重定向到任务提交后编辑任务的详细信息,但是我遇到了基于新创建的pk重定向到页面的问题。每个视图都可以在没有返回HttpResponseRedirect的情况下工作。我还尝试了large =(instance.id)和kwargs=(instance.id)的变量。

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

return HttpResponseRedirect(reverse('task_values', kwargs={'task_id': instance.id}))

还要注意,您不需要保存任务两次。

编辑好的,还有一个问题。您没有为url指定特定的名称,这意味着识别它们的唯一方法是传递完全限定的视图名称:

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

或者,更好的是,使用url()函数来命名您的URL:

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

,你可以使用我上面给出的原始版本。

请注意,错误并没有告诉你它要去enter/<id>/,只是在那个视图中,它试图为重定向创建反向URL并且失败。

最新更新