Подтвердить что ты не робот

Перенаправление на admin Сохранить

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

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

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

4b9b3361

Ответ 1

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

Ответ 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_add(self, request, obj, post_url_continue=None):
    """This makes the response go to the newly created model change page
    without using reverse"""
    return HttpResponseRedirect("../%s" % obj.id])

Ответ 3

Чтобы добавить к ответу @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)

Ответ 4

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

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