2009-08-27 26 views
22

¿Cómo puedo redirigir a un usuario a una aplicación diferente en Guardar?Redirigir al administrador Guardar

Tengo dos aplicaciones, por ejemplo app1 y app2. Si un usuario hace clic en Guardar en app2, debe redireccionarse a app1 en lugar de a la página predeterminada.

No quiero hacer una forma personalizada.

+4

¿Por qué no se ha respondido a ninguna pregunta? –

+0

¿En dónde? En el administrador, en una forma personalizada, ¿dónde? –

+0

en el administrador no en forma personalizada. Es simple administrador, estoy anulando la función guardar – ha22109

Respuesta

-7

def change_view (auto, solicitud, object_id, extra_context = None):

result = super(mymodeladmin, self).change_view(request, object_id, extra_context) 

result['Location'] = "your location" 

return result 
+4

Esta no es una gran respuesta: ¿qué sucede si la change_view no tiene éxito? Además, la asignación al resultado ['Ubicación'] no es muy parecida a django (incluso si puede funcionar).La respuesta anterior (por Daniel Roseman) es buena. –

+0

Debe validar la respuesta de Roseman para obtener 2 puntos de reputación :) Puede aprender cómo usar stackexchange [aquí] (http://meta.stackoverflow.com/) –

+0

@Glide - ¿Qué es validación? (¿Es distinto de la votación ascendente, lo cual hice). Tu enlace de documentos fue un poco amplio. –

83

Para cambiar el destino de la redirección después de guardar en el administrador, debe sobrescribir response_add() (para agregar instancias nuevas) y response_change() (para cambiar las existentes) en la clase ModelAdmin.

Ver el código original en django.contrib.admin.options.

Y si desea que la gente lo siga ayudando en StackOverflow, debe aceptar las respuestas a sus preguntas.

ejemplos rápidos para que sea más clara de cómo hacer esto (que sería dentro de una clase 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's change page 
    without using reverse""" 
    return HttpResponseRedirect("../%s" % obj.id]) 
+0

No he dicho que no estoy aceptando la respuesta. Estaba escribiendo un error y lo he corregido. – ha22109

+0

¿Puedes explicarlo un poco más? No puedo encontrarlo – ha22109

+9

¿Qué tiene que ver un error de tipeo con esto? Ha hecho 35 preguntas en StackOverflow y no ha aceptado una mejor respuesta para una sola. Eso es muy malos modales. –

0

Tal vez echar un vistazo a los espacios de nombres de URL ... Probablemente se podría utilizar HttpResponseRedirect + marcha atrás para redirigir la usuario dentro de su método de salvar invalidado. Tenga en cuenta que esta es una nueva característica en Django 1.1 y no es compatible con 1.0.x.

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

30

Para añadir a la respuesta de @ DanielRoseman, y usted no desea que el usuario redirigido cuando eligen Guarde y continúe y no el botón Guardar, luego podría usar esta solución.

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

Gracias, esto realmente me ayudó. – nym

Cuestiones relacionadas