如何在保存时将用户重定向到其他应用?
我有两个应用,比如app1
和app2
。如果用户点击app2
中的保存,则应将其重定向到app1
,而不是默认页面。
我不想做自定义表单。
答案 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