2009-08-27 14 views
22

Come posso reindirizzare un utente a diverse app su Salva?Reindirizza su admin Salva

Ho due app, ad esempio app1 e app2. Se un utente fa clic su Salva in app2 allora dovrebbe essere reindirizzato a app1 piuttosto che alla pagina predefinita.

Non voglio fare una forma personalizzata.

+4

Perché nessuna risposta accettata per eventuali domande? –

+0

Per salvare dove? Nell'amministratore, in un modulo personalizzato, dove? –

+0

in admin non in forma personalizzata. È semplice admin, sto sovrascrivendo la funzione di salvataggio – ha22109

risposta

-7

def change_view (self, richiesta, object_id, extra_context = None):

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

result['Location'] = "your location" 

return result 
+4

Questa non è una buona risposta: cosa succede se change_view non ha successo? Anche assegnare al risultato ['Posizione'] non è molto simile a Django (anche se potrebbe funzionare).La risposta sopra (di Daniel Roseman) è buona. –

+0

Dovresti convalidare la risposta di Roseman per ottenere 2 punti di reputazione :) Puoi imparare come usare stackexchange [qui] (http://meta.stackoverflow.com/) –

+0

@Glide - cosa sta convalidando (è distinto dal upvoting, che ho fatto). Il tuo collegamento ai documenti è stato un po 'ampio. –

83

Per cambiare la destinazione di reindirizzamento dopo salvo l'amministratore, è necessario eseguire l'override response_add() (per l'aggiunta di nuove istanze) e response_change() (per modificare quelli esistenti) nella classe ModelAdmin.

Vedere il codice originale in django.contrib.admin.options.

E se vuoi che le persone continuino ad aiutarti su StackOverflow, devi accettare le risposte alle tue domande.

esempi rapidi per renderlo più chiaro come fare questo (sarebbe all'interno di una classe 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

ho detto che non accetto la risposta. Stavo digitando un errore e l'ho corretto. – ha22109

+0

puoi spiegarlo ancora un po '. Non riesco a scoprirlo – ha22109

+9

Cosa c'entra un errore di battitura? Hai posto 35 domande su StackOverflow e non hai accettato la risposta migliore per una sola. Questo è un modo molto cattivo. –

0

Forse un'occhiata a spazi dei nomi URL ... Probabilmente si potrebbe usare HttpResponseRedirect + retromarcia per reindirizzare il utente all'interno del metodo di salvataggio sottoposto a override. Tieni presente che questa è una nuova funzionalità di Django 1.1 e non è supportata in 1.0.x.

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

30

Per aggiungere a @ di DanielRoseman risposta, e non si vuole che l'utente reindirizzato quando scelgono Salva e continua e non il pulsante Salva, quindi puoi utilizzare questa soluzione.

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

Grazie, questo mi ha davvero aiutato. – nym