Django - tomando valores de la solicitud POST


83

Tengo la siguiente plantilla de django (http: // IP / admin / start / está asignado a una vista hipotética llamada vista):

{% for source in sources %}
  <tr>
    <td>{{ source }}</td>

    <td>
    <form action="/admin/start/" method="post">
      {% csrf_token %}
      <input type="hidden" name="{{ source.title }}">
      <input type="submit" value="Start" class="btn btn-primary">
    </form>
    </td>

  </tr>
{% endfor %}

sourceses el objects.all()de un modelo de Django al que se hace referencia en la vista. Cada vez que se hace clic en una entrada de envío "Inicio", quiero que la vista "Inicio" use los {{ source.title}}datos en una función antes de devolver una página renderizada. ¿Cómo recopilo información POSTADA (en este caso, en la entrada oculta) en las variables de Python?

Respuestas:


143

Más información sobre los objetos de solicitud que reciben sus vistas: https://docs.djangoproject.com/en/dev/ref/request-response/#httprequest-objects

Además, su campo oculto necesita un nombre confiable y luego un valor:

<input type="hidden" name="title" value="{{ source.title }}">

Luego en una vista:

request.POST.get("title", "")

Utilizo Django Forms donde no tengo un independiente inputy solo un {{ form }}y mi formulario tiene solo una entrada de texto (charfield). ¿Cómo puedo acceder a sus datos?
Nitwit

13

Si necesita hacer algo en la interfaz, puede responder al evento onsubmit de su formulario. Si solo está publicando en admin / start, puede acceder a las variables de publicación en su vista a través del objeto de solicitud. request.POST que es un diccionario de variables de publicación


La otra respuesta me ayudó con un problema que les iba a preguntar (definiciones de selectores de html de nombre / valor) antes de preguntarlo, así que seguiré adelante y marcaré esa aceptada. Sin embargo, gracias por tu ayuda. :)
Randall Ma

2

Para los formularios de django, puede hacer esto;

form = UserLoginForm(data=request.POST) #getting the whole data from the user.
user = form.save() #saving the details obtained from the user.
username = user.cleaned_data.get("username") #where "username" in parenthesis is the name of the Charfield (the variale name i.e, username = forms.Charfield(max_length=64))

UserLoginForm en la respuesta es el nombre del formulario
Irfan wani
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.