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.