2011-02-06 30 views
5

Tengo un formulario simple, que cuando se envía redirige a una página de éxito.django - paso de información al redirigir después de POST

Quiero ser capaz de utilizar los datos que se enviaron en el paso anterior, en mi página de éxito.

Por lo que yo sé, no puede pasar datos POST al redirigir, entonces, ¿cómo lograr esto?

Por el momento tengo que devolver directamente la página de éxito desde la misma URL, pero esto causa el temido reenvío de datos cuando se actualiza.

¿Está usando request.session la única manera de hacerlo?

+0

Cualquier mecanismo que permite que persistan los datos entre las peticiones va a hacer (ya que es al final lo que pides). La sesión es probablemente la más simple, pero definitivamente no la única. –

Respuesta

7

Puede:

  1. pasar los datos (ya sea completo o sólo los datos de identificación de objeto) en request.session
  2. con algo como redirección de id = [id] en la URL - donde [id]? apunta a tu objeto.

Actualización:

En cuanto pt. 1 anterior, quería decir que usted podría hacer (en el controlador de la POST):

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

O usted podría intentar pasar la totalidad del objeto (que debería funcionar, pero no estoy 100% seguro):

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

¿A qué objeto se refiere? ¿Hay algún objeto en alguna parte que contenga datos POST que puedan evaluarse? – Acorn

+0

Sí, se llama request.POST.data –

+0

Pero cuando lo redirecciono, la página no tendrá acceso a los datos POST, ¿o sí? – Acorn

8

Hago esto todo el tiempo, sin necesidad de un objeto de sesión. Es un patrón muy común POST-redirect-GET. Normalmente lo que hago es:

  1. tener una visión con la lista de objetos y una forma para publicar los datos
  2. publicaciones con éxito a esa forma se guardan los datos y genera una redirección a la vista de detalle de objetos

De esta forma ahorras al realizar POST y redirigir después de guardar.

Una vista ejemplo, suponiendo un modelo de 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: no me he dado cuenta de que Acorn podría simplemente redirigir a la página de detalles del objeto :-) –

+0

El caso es que mi página no se está enviando a una base de datos, está enviando un mensaje en Internet, por lo que no hay una página relevante a la que redireccionar. – Acorn

+0

@Acorn Bueno, en lugar de guardar hacer el envío, y luego redirigir a la página de éxito que mencionas en tu pregunta –

Cuestiones relacionadas