重定向管理员保存

时间:2009-08-27 09:11:55

标签: django django-admin

如何在保存时将用户重定向到其他应用?

我有两个应用,比如app1app2。如果用户点击app2中的保存,则应将其重定向到app1,而不是默认页面。

我不想做自定义表单。

4 个答案:

答案 0 :(得分:91)

要在管理员中保存后更改重定向目标,您需要在response_add()类中覆盖response_change()(用于添加新实例)和ModelAdmin(用于更改现有实例)。

请参阅django.contrib.admin.options中的原始代码。

如果您希望人们继续在StackOverflow上为您提供帮助,您需要接受问题的答案。

快速举例说明如何做到这一点(将在ModelAdmin类中):

from django.core.urlresolvers import reverse

def response_add(self, request, obj, post_url_continue=None):
    """This makes the response after adding go to another apps changelist for some model"""
    return HttpResponseRedirect(reverse("admin:otherappname_modelname_changelist"))


def response_change(self, request, obj, post_url_continue=None):
    """This makes the response go to the newly created model's change page
    without using reverse"""
    return HttpResponseRedirect("../%s" % obj.id])

答案 1 :(得分:34)

要添加@ DanielRoseman的答案,并且您不希望用户在选择保存并继续而不是保存按钮时重定向,则可以使用此解决方案。

def response_add(self, request, obj, post_url_continue="../%s/"):
    if '_continue' not in request.POST:
        return HttpResponseRedirect(get_other_app_url())
    else:
        return super(MyModelAdmin, self).response_add(request, obj, post_url_continue)

def response_change(self, request, obj):
    if '_continue' not in request.POST:
        return HttpResponseRedirect(get_other_app_url())
    else:
        return super(MyAdmin, self).response_change(request, obj)

答案 2 :(得分:0)

也许看一下URL命名空间......你可以使用HttpResponseRedirect + reverse来重定向你覆盖的保存方法中的用户。请记住,这是Django 1.1中的一项新功能,1.0.x中不支持。

http://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces

答案 3 :(得分:-8)

def change_view(self,request,object_id,extra_context = None):

result = super(mymodeladmin, self).change_view(request, object_id, extra_context)

result['Location'] = "your location"

return result