Перенаправить на администратора Сохранить - PullRequest
24 голосов
/ 27 августа 2009

Как перенаправить пользователя в другое приложение при сохранении?

У меня есть два приложения, скажем app1 и app2. Если пользователь нажимает кнопку Сохранить в app2, он должен быть перенаправлен на app1 вместо страницы по умолчанию.

Я не хочу делать пользовательскую форму.

Ответы [ 4 ]

91 голосов
/ 27 августа 2009

Чтобы изменить место назначения перенаправления после сохранения в администраторе, необходимо переопределить 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])
34 голосов
/ 10 января 2013

Чтобы добавить к ответу @ 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)
0 голосов
/ 31 августа 2009

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
0 голосов
/ 27 августа 2009

Возможно, взгляните на пространства имен URL ... Вы, вероятно, могли бы использовать HttpResponseRedirect + reverse, чтобы перенаправить пользователя внутрь переопределенного метода сохранения. Имейте в виду, что это новая функция в Django 1.1 и не поддерживается в 1.0.x.

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

...