How can I redirect a user to different app on Save?
I have two app, say app1
and app2
. If a user clicks on Save in app2
then it should be redirected to app1
rather then the default page.
I don't want to do a customform.
How can I redirect a user to different app on Save?
I have two app, say app1
and app2
. If a user clicks on Save in app2
then it should be redirected to app1
rather then the default page.
I don't want to do a customform.
To change the redirect destination after save in the admin, you need to override response_add()
(for adding new instances) and response_change()
(for changing existing ones) in the ModelAdmin
class.
See the original code in django.contrib.admin.options
.
And if you want people to keep helping you on StackOverflow, you need to accept answers to your questions.
Quick examples to make it clearer how to do this (would be within a ModelAdmin class):
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])
To add to @DanielRoseman's answer, and you DON'T want the user redirected when they choose Save and continue and not the Save button, then you could use this solution instead.
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)
Maybe take a look at URL namespaces... You could probably use HttpResponseRedirect + reverse to redirect the user inside of your overridden save method. Keep in mind that this is a new feature in Django 1.1 and is not supported in 1.0.x.
http://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces
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