Как получить значение из поля формы в структуре django?

105

Как мне получить значения из полей формы в платформе django? Я хочу делать это в представлениях, а не в шаблонах ...

Kspacja
источник

Ответы:

130

Использование формы в представлении в значительной степени объясняет это.

Стандартный шаблон для обработки формы в представлении выглядит так:

def contact(request):
    if request.method == 'POST': # If the form has been submitted...
        form = ContactForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...

            print form.cleaned_data['my_form_field_name']

            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        form = ContactForm() # An unbound form

    return render_to_response('contact.html', {
        'form': form,
    })
мику
источник
Пример такой связанной формы:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Боб Стейн
Почему шаблон может запускаться {{form.name_of_field}}, когда поля на самом деле находятся в form.data или form.cleaned_data?
user3245268
57

Сделайте ваш выбор:

def my_view(request):

    if request.method == 'POST':
        print request.POST.get('my_field')

        form = MyForm(request.POST)

        print form['my_field'].value()
        print form.data['my_field']

        if form.is_valid():

            print form.cleaned_data['my_field']
            print form.instance.my_field

            form.save()
            print form.instance.id  # now this one can access id/pk

Примечание: поле доступно, как только оно становится доступным.

Laffuste
источник
4
Этот ответ лучше всего резюмирует все варианты - доступ к необработанным данным POST, непроверенным полям формы и, наконец, проверенным полям формы.
Серж
2
Возможно, я просто сегодня слишком долго смотрел на свой экран, но мне потребовался час, чтобы найти это очень простое решение form['my_field'].value()для доступа к значениям формы по запросу POST. Несколько дней: |
ionalchemist
28

Вы можете сделать это после того, как подтвердите свои данные.

if myform.is_valid():
  data = myform.cleaned_data
  field = data['field']

Также прочтите django docs. Они идеальны.

икостия
источник
13
а как насчет b4 вы чистите свои данные?
Роберт Джонстон
2
Перед тем, как очистить данные, остается только request.POST, который хранится вместе с экземпляром формы. Очистка - это то, что связывает данные POST с полями формы. Перед очисткой вам нужно будет поработать с request.POST.
freb
Можно ли получить значение formField, если оно установлено по умолчанию?
Fydo 07
8

Чтобы получить данные из формы, которая отправляет почтовый запрос, вы можете сделать это следующим образом

def login_view(request):
    if(request.POST):
        login_data = request.POST.dict()
        username = login_data.get("username")
        password = login_data.get("password")
        user_type = login_data.get("user_type")
        print(user_type, username, password)
        return HttpResponse("This is a post request")
    else:
        return render(request, "base.html")
ChandyShot
источник
7

Я использую django 1.7+ и python 2.7+, решение, указанное выше, не работает. И входное значение в форме можно получить, используя POST, как показано ниже (используйте ту же форму выше):

if form.is_valid():
  data = request.POST.get('my_form_field_name')
  print data

Надеюсь это поможет.

Чжихун
источник