Jak uzyskać wartość z pola formularza w frameworku django?

105

Jak uzyskać wartości z pól formularza w frameworku django? Chcę to zrobić w widokach, a nie w szablonach ...

kspacja
źródło

Odpowiedzi:

130

Używanie formularza w widoku prawie to wyjaśnia.

Standardowy wzorzec przetwarzania formularza w widoku wygląda następująco:

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,
    })
miku
źródło
Przykład tego związanego formularza:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein
Dlaczego szablon może działać {{form.name_of_field}}, skoro pola są w rzeczywistości w form.data lub form.cleaned_data?
user3245268
57

Wybierz:

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

Uwaga: pole jest dostępne, gdy tylko będzie dostępne.

laffuste
źródło
4
Ta odpowiedź najlepiej podsumowuje wszystkie opcje - dostęp do surowych danych POST, niezatwierdzonych pól formularzy i ostatecznie zweryfikowanych pól formularzy.
Serge Merzliakov
2
Może po prostu zbyt długo patrzyłem na swój ekran, ale zajęło mi godzinę znalezienie tego bardzo prostego rozwiązania form['my_field'].value()dostępu do wartości formularza na żądanie POST. W niektóre dni: |
ionalchemist
28

Możesz to zrobić po zweryfikowaniu swoich danych.

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

Przeczytaj również dokumentację django. Oni są idealni.

ikostia
źródło
13
co z b4 czyścisz swoje dane?
Robert Johnstone,
2
Przed wyczyszczeniem danych pozostaje tylko request.POST, który jest przechowywany z instancją formularza. Czyszczenie jest tym, co kojarzy dane POST z polami formularza. Przed czyszczeniem musiałbyś popracować z request.POST.
freb
Czy można uzyskać wartość formField, jeśli jest ustawiona jako początkowa?
Fydo
8

Aby pobrać dane z formularza, który wysyła prośbę o wpis, możesz to zrobić w ten sposób

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
źródło
7

Używam django 1.7+ i pythona 2.7+, rozwiązanie powyżej dawki nie działa. A wartość wejściową w formularzu można uzyskać za pomocą POST jak poniżej (użyj tego samego formularza powyżej):

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

Mam nadzieję że to pomoże.

zhihong
źródło