Django - Werte aus POST-Anfrage entnehmen

84

Ich habe die folgende Django-Vorlage (http: // IP / admin / start / ist einer hypothetischen Ansicht namens view zugeordnet):

{% 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 %}

sourcesist das objects.all()eines Django-Modells, auf das in der Ansicht verwiesen wird. Wenn auf eine Übermittlungseingabe "Start" geklickt wird, soll die Ansicht "Start" die {{ source.title}}Daten in einer Funktion verwenden, bevor eine gerenderte Seite zurückgegeben wird. Wie sammle ich POST-Informationen (in diesem Fall in der versteckten Eingabe) in Python-Variablen?

Randall Ma
quelle

Antworten:

144

Informationen zu Anforderungsobjekten, die Ihre Ansichten erhalten: https://docs.djangoproject.com/de/dev/ref/request-response/#httprequest-objects

Auch Ihr verstecktes Feld benötigt einen zuverlässigen Namen und dann einen Wert:

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

Dann in einer Ansicht:

request.POST.get("title", "")
jdi
quelle
Ich verwende Django-Formulare, bei denen ich kein unabhängiges inputund nur ein habe {{ form }}und mein Formular nur eine Texteingabe (Zeichenfeld) hat. Wie kann ich auf seine Daten zugreifen?
Nitwit
13

Wenn Sie am Frontend etwas tun müssen, können Sie auf das Onsubmit-Ereignis Ihres Formulars reagieren. Wenn Sie nur in admin / start posten, können Sie über das Anforderungsobjekt auf Postvariablen in Ihrer Ansicht zugreifen. request.POST ist ein Wörterbuch mit Post-Variablen

dm03514
quelle
Die andere Antwort half mir bei einem Problem, das ich Ihnen stellen wollte (Definitionen von Name / Wert-HTML-Selektoren), bevor ich es fragte, also werde ich fortfahren und das akzeptierte markieren. Vielen Dank für Ihre Hilfe. :)
Randall Ma
2

Für Django-Formen können Sie dies tun;

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))
Irfan wani
quelle
UserLoginForm in der Antwort ist der Name des Formulars
Irfan wani