2011-02-06 14 views
5

Ho un semplice modulo, che quando viene inviato reindirizza a una pagina di successo.django - passaggio di informazioni durante il reindirizzamento dopo il POST

Desidero poter utilizzare i dati inviati nel passaggio precedente, nella mia pagina di successo.

Per quanto ne so, non è possibile passare i dati POST durante il reindirizzamento, quindi come ottenere ciò?

Al momento devo semplicemente restituire direttamente la pagina di successo dallo stesso URL, ma ciò provoca la temuta ripubblicazione dei dati una volta aggiornata.

L'utilizzo di request.session è l'unico modo per andare?

+0

Qualsiasi meccanismo che consente di mantenere i dati tra richieste farà (poiché questo è, alla fine, quello che chiedi). La sessione è probabilmente la più semplice, ma sicuramente non l'unica. –

risposta

7

È possibile:

  1. passare i dati (sia i dati completi o semplicemente id per oggetto) in request.session
  2. Redirect con qualcosa di simile id = [id] nell'URL - dove [id]? punta al tuo oggetto.

Aggiornamento:

Per quanto riguarda pt. 1 di cui sopra, volevo dire che si poteva fare (nel gestore POST):

my_object = MyModel.objects.create(...) 
request.session['my_object_id'] = my_object.id 

Oppure si potrebbe provare a passare l'intero oggetto (che dovrebbe funzionare ma non sono sicuro al 100%):

my_object = MyModel.objects.create(...) 
request.session['my_object'] = my_object 
+0

A quale oggetto ti riferisci? C'è un oggetto da qualche parte che contiene i dati POST che possono essere valutati? – Acorn

+0

Sì, è denominato request.POST.data –

+0

Ma quando reindirizzo, la pagina non avrà accesso ai dati POST lo farà? – Acorn

8

Lo faccio sempre, non c'è bisogno di un oggetto di sessione. È un modello molto comune POST-redirect-GET. In genere quello che faccio è:

  1. hanno una vista con la lista oggetto e un modulo per inviare i dati
  2. Distacco con successo a quella forma salva i dati e genera un redirect alla vista oggetto dettaglio

In questo modo si salva POST e si reindirizza dopo il salvataggio.

Una vista esempio, ipotizzando un modello di thingies:

def all_thingies(request, **kwargs): 
    if request.POST: 
     form = ThingieForm(request.POST) 
     if form.is_valid(): 
      thingie = form.save() 
      return HttpResponseRedirect(thingie.get_absolute_url()) 
    else: 
     form = ThingieForm() 
    return object_list(request, 
         queryset = Thingie.objects.all().order_by('-id'), 
         template_name = 'app/thingie-list.html', 
         extra_context = { 'form': form }, 
         paginate_by = 10) 
+0

+1: Non ho capito che Acorn potrebbe semplicemente voler reindirizzare alla pagina dei dettagli dell'oggetto :-) –

+0

Il fatto è che la mia pagina non si sta sottomettendo a un database, sta inviando un messaggio su Internet, quindi non c'è nessuna pagina pertinente da cui reindirizzare. – Acorn

+0

@Acorn Bene, invece di salvare l'invio, quindi reindirizzare alla pagina di successo che hai menzionato nella tua domanda –

Problemi correlati