Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Django - pasar datos Post

Estas en el tema de Django - pasar datos Post en el foro de Python en Foros del Web. Soy nuevo en Django estoy comenzando con un libro que encontré el la web, les comento que tengo el siguiente dilema. Tengo un modelo muy ...
  #1 (permalink)  
Antiguo 12/06/2013, 18:25
 
Fecha de Ingreso: diciembre-2011
Ubicación: Temuco
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Pregunta Django - pasar datos Post

Soy nuevo en Django estoy comenzando con un libro que encontré el la web, les comento que tengo el siguiente dilema.
Tengo un modelo muy simple sobre un cliente, cree un formulario para buscar a los clientes, en dicho formulario se puede buscar por nombre, profesión, provincia, etc.
bueno mi vista es como sigue

Código:
def BuscaProfesional(request):
    if request.method == 'POST':
        form = FormBuscaProfesional(request.POST)
        if form.is_valid():
            return HttpResponseRedirect('/resultadobuscaprofesional')
    else:
        form = FormBuscaProfesional()
    return render_to_response('busca_profesional.html', locals(), context_instance=RequestContext(request))
esto funciona bien valida los campos requeridos, pero cuando el formulario esta valido se va a mi vista "resultadobuscaprofesional", en la cual debería capturar los valores ingresados en el formulario anterior y hacer filtro a la base de datos para luego mostrarlo en un tabla pero los datos no llegan, adjunto la vista

Código:
def ResultadoBuscaProfesional(request):
    if request.POST:
        nombre = request.POST.get('nombre')
        # profesion = request.POST.get('profesion')
        # comuna = request.POST.get('comuna')
        datos = Profesional.objects.filter(nombre__icontains=nombre)
    return render_to_response('resultado_busca_profesional.html', locals(), context_instance=RequestContext(request))
este es mi template
Código:
{% extends 'template.html' %}
{% block section %}
    {% csrf_token %}
    <table>
        <tbody>
        {% for d in datos %}
            <tr>
                <td>{{ d.nombre }}</td>
                <td>{{ d.id_profesion }}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
{% endblock %}
no se que hago mal. alguna idea seria de mucha ayuda
Gracias
  #2 (permalink)  
Antiguo 12/06/2013, 18:54
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Django - pasar datos Post

Hay varias cosas aquí.

Cuando implementas una búsqueda no te recomiendo que sea vía POST. Ya que POST esta mas que nada reservado cuando haces modificaciones a los datos cuando aquí lo que quieres es mostrar datos, para esto es recomendado GET. Por que incluso te va a servir para cuando quieras paginar los resultados.

Otra cosa no puedes pasar datos cuando haces un redirect al menos no vía POST. Es una de las restricciones que pone HTTP para que mantengas simple tu diseño.

Quedándote algo mas o menos así:
Código Python:
Ver original
  1. def BuscaProfesional(request):
  2.     form = FormBuscaProfesional(request.GET or None)
  3.     if form.is_valid():
  4.         nombre = form.cleaned_data['nombre']
  5.         datos = Profesional.objects.filter(nombre__icontains=nombre)
  6.     return render_to_response('busca_profesional.html', locals(), context_instance=RequestContext(request))

Solamente en tu form tag cambias method="GET" en lugar de POST.
  #3 (permalink)  
Antiguo 12/06/2013, 20:00
 
Fecha de Ingreso: diciembre-2011
Ubicación: Temuco
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Django - pasar datos Post

razpeitia gracias por tu pronta respuesta, entiendo lo de GET y te encuentro razón, solo me queda una duda donde yo le indico donde quiero que me redireccione si el formulario es valido, por que en el tag ACCTION del FORM en HTML si yo pongo la vista funciona pero no me valida el formulario.

Eso y Gracias


Cita:
Iniciado por razpeitia Ver Mensaje
Hay varias cosas aquí.

Cuando implementas una búsqueda no te recomiendo que sea vía POST. Ya que POST esta mas que nada reservado cuando haces modificaciones a los datos cuando aquí lo que quieres es mostrar datos, para esto es recomendado GET. Por que incluso te va a servir para cuando quieras paginar los resultados.

Otra cosa no puedes pasar datos cuando haces un redirect al menos no vía POST. Es una de las restricciones que pone HTTP para que mantengas simple tu diseño.

Quedándote algo mas o menos así:
Código Python:
Ver original
  1. def BuscaProfesional(request):
  2.     form = FormBuscaProfesional(request.GET or None)
  3.     if form.is_valid():
  4.         nombre = form.cleaned_data['nombre']
  5.         datos = Profesional.objects.filter(nombre__icontains=nombre)
  6.     return render_to_response('busca_profesional.html', locals(), context_instance=RequestContext(request))

Solamente en tu form tag cambias method="GET" en lugar de POST.
  #4 (permalink)  
Antiguo 13/06/2013, 14:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Django - pasar datos Post

Después que validas no es necesario hacer una redirección. Puedes simplemente mostrar los resultados.

Algo mas o menos asi: Llena lo huecos de acuerdo a tus necesidades.

Código Python:
Ver original
  1. def BuscaProfesional(request):
  2.     form = FormBuscaProfesional(request.GET or None)
  3.     if form.is_valid():
  4.         # Regresa un response, con los datos de la busqueda y con el template de mostrar resultados.
  5.     else:
  6.         # Regresa un response con el template de busqueda
  #5 (permalink)  
Antiguo 18/06/2013, 09:19
 
Fecha de Ingreso: diciembre-2011
Ubicación: Temuco
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Django - pasar datos Post

Muchas Gracias razpeita, entiendo todo OK.

Cita:
Iniciado por razpeitia Ver Mensaje
Después que validas no es necesario hacer una redirección. Puedes simplemente mostrar los resultados.

Algo mas o menos asi: Llena lo huecos de acuerdo a tus necesidades.

Código Python:
Ver original
  1. def BuscaProfesional(request):
  2.     form = FormBuscaProfesional(request.GET or None)
  3.     if form.is_valid():
  4.         # Regresa un response, con los datos de la busqueda y con el template de mostrar resultados.
  5.     else:
  6.         # Regresa un response con el template de busqueda

Etiquetas: django, formularios, vistas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:23.