Comment obtenir de la valeur à partir du champ de formulaire dans le framework django?


104

Comment obtenir des valeurs à partir des champs de formulaire dans le framework django? Je veux faire cela dans les vues, pas dans les modèles ...

Réponses:


129

L'utilisation d'un formulaire dans une vue l' explique assez bien.

Le modèle standard de traitement d'un formulaire dans une vue ressemble à ceci:

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

Exemple de cette forme liée:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein

Pourquoi un modèle peut-il exécuter {{form.name_of_field}}, alors que les champs sont en fait au format form.data ou form.cleaned_data?
user3245268

56

Faites votre choix:

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

Remarque: le champ est accessible dès qu'il est disponible.


4
Cette réponse résume le mieux toutes les options - accès aux données POST brutes, champs de formulaire non validés et enfin champs de formulaire validés.
Serge Merzliakov

2
Peut-être ai-je juste regardé mon écran trop longtemps aujourd'hui, mais il m'a fallu une heure pour trouver cette solution très simple form['my_field'].value()pour accéder aux valeurs de formulaire sur demande POST. Quelques jours: |
ionalchemist

28

Vous pouvez le faire après avoir validé vos données.

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

Lisez également la documentation django. Ils sont parfaits.


13
qu'en est-il de b4 vous nettoyez vos données?
Robert Johnstone

2
Avant de nettoyer vos données, il n'y a que request.POST qui est stocké avec l'instance de formulaire. Le nettoyage est ce qui associe les données POST aux champs du formulaire. Avant le nettoyage, vous devrez travailler avec request.POST.
vendredi

Est-il possible d'obtenir la valeur de formField si sa valeur initiale est définie?
Fydo

8

Pour récupérer les données du formulaire qui envoie une demande de publication, vous pouvez le faire comme ceci

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

J'utilise django 1.7+ et python 2.7+, la solution ci-dessus ne fonctionne pas. Et la valeur d'entrée dans le formulaire peut être obtenue en utilisant POST comme ci-dessous (utilisez le même formulaire ci-dessus):

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

J'espère que cela t'aides.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.