Django - pobieranie wartości z żądania POST

84

Mam następujący szablon django (http: // IP / admin / start / jest przypisany do hipotetycznego widoku zwanego widokiem):

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

sourcesjest objects.all()modelem Django, do którego odwołuje się widok. Za każdym razem, gdy zostanie kliknięty element wejściowy przesyłania „Start”, chcę, aby widok „start” używał {{ source.title}}danych w funkcji przed zwróceniem renderowanej strony. Jak zebrać informacje przesłane POST (w tym przypadku w ukrytych danych wejściowych) do zmiennych Pythona?

Randall Ma
źródło

Odpowiedzi:

145

Przeczytaj o obiektach żądań, które otrzymują Twoje widoki: https://docs.djangoproject.com/en/dev/ref/request-response/#httprequest-objects

Również twoje ukryte pole wymaga niezawodnej nazwy, a następnie wartości:

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

Następnie w widoku:

request.POST.get("title", "")
jdi
źródło
Używam Django Forms, gdzie nie mam niezależnego inputi tylko a, {{ form }}a mój formularz ma tylko jedno pole tekstowe (charfield). jak mogę uzyskać dostęp do jego danych?
Nitwit
@Nitwit nameatrybut będzie nazwą właściwości, do której przypisałeś charfield. Jeśli nie jesteś w 100%, naciśnij F12 w przeglądarce z załadowanym formularzem i wybierz element wejściowy, aby zobaczyć, co Django nadał atrybutowi nazwy.
James Bellaby
13

Jeśli chcesz coś zrobić w interfejsie użytkownika, możesz odpowiedzieć na zdarzenie dotyczące przesłania formularza. Jeśli piszesz tylko do admin / start, możesz uzyskać dostęp do zmiennych postu w swoim widoku poprzez obiekt żądania. request.POST, który jest słownikiem zmiennych pocztowych

dm03514
źródło
Druga odpowiedź pomogła mi w rozwiązaniu problemu, o który miałem Cię zapytać (definicje selektorów html nazwy / wartości), zanim o to zapytałem, więc zaznaczę, że został zaakceptowany. Ale dzięki za pomoc. :)
Randall Ma,
2

W przypadku formularzy django możesz to zrobić;

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
źródło
UserLoginForm w odpowiedzi to nazwa formularza
Irfan wani