Як отримати значення з поля форми в рамках django?


104

Як я можу отримувати значення з полів форми в рамках django? Я хочу це зробити у видах, а не в шаблонах ...

Відповіді:


129

Використання форми у поданні в значній мірі пояснює це.

Стандартний шаблон для обробки форми у поданні виглядає приблизно так:

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?
користувач3245268

56

Оберіть свій вибір:

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

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


4
Ця відповідь найкраще узагальнює всі варіанти - доступ до необроблених даних POST, недійсних полів форми та нарешті перевірених полів форми.
Серж Мерзляков

2
Можливо, я просто занадто довго дивився на свій екран, але мені знадобилася година, щоб знайти це дуже просте рішення form['my_field'].value()для доступу до значень форми на запит POST. Деякі дні: |
іонахімік

28

Це можна зробити після перевірки ваших даних.

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

Також прочитайте документи про джанго. Вони ідеальні.


13
що з b4 ви очищаєте свої дані?
Роберт Джонстоун

2
Перед тим, як очистити свої дані, є лише request.POST, який зберігається з екземпляром форми. Очищення - це те, що асоціює дані POST з полями форм. Перед чищенням вам доведеться попрацювати із запитом.POST.
фреб

Чи можливо отримати значення formField, якщо воно встановлено початковим?
Фідо

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")

7

Я використовую django 1.7+ та python 2.7+, розчин вище дози не працює. А вхідне значення у формі можна отримати за допомогою POST, як показано нижче (використовуйте ту ж форму, що вище):

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

Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.