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

kspacja
la source

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,
    })
Miku
la source
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.

laffuste
la source
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.

Ikostia
la source
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")
ChandyShot
la source
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.

zhihong
la source