Django - получение значений из запроса POST

84

У меня есть следующий шаблон django (http: // IP / admin / start / назначается гипотетическому представлению под названием view):

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

sources- objects.all()это модель Django, на которую ссылается представление. Каждый раз, когда щелкают ввод «Начать» для отправки, я хочу, чтобы «начальное» представление использовало {{ source.title}}данные в функции перед возвратом обработанной страницы. Как мне собрать POST-информацию (в данном случае в скрытом вводе) в переменные Python?

Рэндалл Ма
источник

Ответы:

145

Прочтите об объектах запроса, которые получают ваши представления: https://docs.djangoproject.com/en/dev/ref/request-response/#httprequest-objects

Также вашему скрытому полю нужно надежное имя, а затем значение:

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

Тогда в представлении:

request.POST.get("title", "")
jdi
источник
Я использую Django Forms, где у меня нет независимого inputи просто a, {{ form }}а моя форма имеет только один ввод текста (поле ввода). как я могу получить доступ к его данным?
Nitwit
@Nitwit nameатрибутом будет имя свойства, которому вы присвоили поле char. Если вы не на 100%, нажмите F12 в браузере с загруженной формой и выберите элемент ввода, чтобы увидеть, что Django дал атрибут name.
Джеймс Беллаби,
13

Если вам нужно что-то сделать в интерфейсе, вы можете ответить на событие onsubmit вашей формы. Если вы просто отправляете сообщение в admin / start, вы можете получить доступ к переменным сообщения в вашем представлении через объект запроса. request.POST - словарь пост-переменных.

dm03514
источник
Другой ответ помог мне с проблемой, которую я собирался задать вам (определения html-селекторов имени / значения), прежде чем я его спросил, поэтому я продолжу и отмечу, что он принят. Спасибо за вашу помощь. :)
Randall Ma
2

Для форм django вы можете сделать это;

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 в ответе - название формы
Irfan wani