一尘不染

重定向到管理员保存

django

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

我有两个应用,分别说app1app2。如果用户单击“保存在” app2,则应将其重定向到app1默认页面,而不是默认页面。

我不想做一个定制表格。


阅读 328

收藏
2020-03-29

共2个答案

一尘不染

要在保存到管理员后更改重定向目标,你需要在类中重写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])
2020-03-29
一尘不染

要添加到@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)
2020-03-29