Come ottenere valore dal campo del modulo nel framework django?


104

Come ottengo i valori dai campi del modulo nel framework django? Voglio farlo nelle visualizzazioni, non nei modelli ...

Risposte:


129

L'uso di un modulo in una vista lo spiega praticamente.

Il modello standard per l'elaborazione di un modulo in una vista è simile al seguente:

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,
    })

Esempio di quella forma vincolata:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein

Perché un modello può essere eseguito {{form.name_of_field}}, quando i campi sono effettivamente in form.data o form.cleaned_data?
user3245268

56

Fai la tua scelta:

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

Nota: si accede al campo non appena è disponibile.


4
Questa risposta riassume al meglio tutte le opzioni: accesso a dati POST non elaborati, campi modulo non convalidati e infine campi modulo convalidati.
Serge Merzliakov

2
Forse ho solo guardato il mio schermo troppo a lungo oggi, ma mi ci è voluta un'ora per trovare questa soluzione molto semplice form['my_field'].value()per accedere ai valori del modulo su richiesta POST. Alcuni giorni: |
ionalchemist

28

Puoi farlo dopo aver convalidato i tuoi dati.

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

Inoltre, leggi i documenti di django. Sono perfetti.


13
che dire di b4 pulisci i tuoi dati?
Robert Johnstone

2
Prima di pulire i tuoi dati, c'è solo request.POST che viene memorizzato con l'istanza del modulo. La pulizia è ciò che associa i dati POST ai campi del modulo. Prima di pulire dovresti lavorare con request.POST.
freb

È possibile ottenere il valore di formField se è impostato l'iniziale?
Fydo

8

Per recuperare i dati dal modulo che invia la richiesta di post puoi farlo in questo modo

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

Uso django 1.7+ e python 2.7+, la soluzione sopra la dose non funziona. E il valore di input nel modulo può essere ottenuto utilizzando POST come di seguito (utilizzare lo stesso modulo sopra):

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

Spero che questo ti aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.