Wie bekomme ich Wert aus dem Formularfeld im Django-Framework?

104

Wie erhalte ich Werte aus Formularfeldern im Django-Framework? Ich möchte dies in Ansichten tun, nicht in Vorlagen ...

kspacja
quelle

Antworten:

128

Die Verwendung eines Formulars in einer Ansicht erklärt dies ziemlich genau.

Das Standardmuster für die Verarbeitung eines Formulars in einer Ansicht sieht folgendermaßen aus:

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
quelle
Beispiel für diese gebundene Form:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein
Warum kann eine Vorlage {{form.name_of_field}} ausführen, wenn sich die Felder tatsächlich in form.data oder form.cleaned_data befinden?
user3245268
56

Treffen Sie Ihre Wahl:

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

Hinweis: Auf das Feld wird zugegriffen, sobald es verfügbar ist.

laffuste
quelle
4
Diese Antwort fasst alle Optionen am besten zusammen - Zugriff auf POST-Rohdaten, nicht validierte Formularfelder und schließlich validierte Formularfelder.
Serge Merzliakov
2
Vielleicht habe ich heute nur zu lange auf meinen Bildschirm geschaut, aber ich habe eine Stunde gebraucht, um diese sehr einfache Lösung form['my_field'].value()für den Zugriff auf Formularwerte auf POST-Anfrage zu finden. Einige Tage: |
ionalchemist
28

Sie können dies tun, nachdem Sie Ihre Daten validiert haben.

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

Lesen Sie auch die Django-Dokumente. Sie sind perfekt.

Ikostia
quelle
13
Was ist mit b4, wenn Sie Ihre Daten bereinigen?
Sevenearths
2
Bevor Sie alle Ihre Daten bereinigen, gibt es nur request.POST, das mit der Formularinstanz gespeichert wird. Durch die Bereinigung werden die POST-Daten mit den Formularfeldern verknüpft. Vor dem Reinigen müssten Sie mit request.POST arbeiten.
freb
Ist es möglich, den Wert von formField abzurufen, wenn der Initialwert festgelegt ist?
Fydo
8

Um Daten aus einem Formular abzurufen, das eine Post-Anfrage sendet, können Sie dies folgendermaßen tun

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
quelle
7

Ich benutze Django 1.7+ und Python 2.7+, die Lösung über der Dosis funktioniert nicht. Der Eingabewert im Formular kann mithilfe des folgenden POST abgerufen werden (verwenden Sie das gleiche Formular oben):

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

Hoffe das hilft.

Zhihong
quelle