Ответ 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
Как перенаправить пользователя в другое приложение на Сохранить?
У меня есть два приложения, скажем app1
и app2
. Если пользователь нажимает кнопку "Сохранить в app2
", он должен быть перенаправлен на app1
, а не на страницу по умолчанию.
Я не хочу делать пользовательскую форму.
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
Чтобы изменить адрес перенаправления после сохранения в администраторе, вам необходимо переопределить 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])
Чтобы добавить к ответу @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)
Возможно, взгляните на пространства имен URL... Возможно, вы можете использовать HttpResponseRedirect + reverse для перенаправления пользователя внутри вашего метода переопределения. Имейте в виду, что это новая функция в Django 1.1 и не поддерживается в версии 1.0.x.
http://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces