Django - отримання значень із запиту POST


84

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

{% 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}}дані у функції перед поверненням відтвореної сторінки. Як зібрати інформацію, розміщену (у даному випадку у прихованому введенні) у змінні 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", "")

Я використовую Django Forms там, де я не маю незалежного, inputа просто a, {{ form }}і моя форма має лише один ввід тексту (charfield). як я можу отримати доступ до його даних?
Nitwit

@Nitwit nameатрибутом буде ім'я властивості, якій ви призначили поле знаків. Якщо ви не на 100% натисніть F12, перебуваючи у браузері із завантаженою формою, і виберіть елемент введення, щоб побачити, що Django дав атрибут name.
Джеймс Беллабі,

14

Якщо вам потрібно щось зробити на передній панелі, ви можете відповісти на подію подання вашої форми. Якщо ви просто публікуєте повідомлення в адміністраторі / запуску, ви можете отримати доступ до змінних публікації у своєму поданні через об'єкт запиту. request.POST, який є словником змінних повідомлення


Інша відповідь допомогла мені у вирішенні проблеми, яку я збирався запитати у вас (визначення назв / значень селекторів 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.