¿Cómo obtener valor del campo de formulario en el marco de django?

104

¿Cómo obtengo valores de los campos de formulario en el marco de django? Quiero hacer esto en vistas, no en plantillas ...

kspacja
fuente

Respuestas:

129

Usar un formulario en una vista lo explica bastante bien.

El patrón estándar para procesar un formulario en una vista tiene este aspecto:

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
fuente
Ejemplo de esa forma encuadernada:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein
¿Por qué una plantilla puede ejecutar {{form.name_of_field}}, cuando los campos están realmente en form.data o form.cleaned_data?
user3245268
56

Elige tu opción:

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: se accede al campo tan pronto como esté disponible.

laffuste
fuente
4
Esta respuesta resume mejor todas las opciones: acceder a datos POST sin procesar, campos de formulario no validados y, finalmente, campos de formulario validados.
Serge Merzliakov
2
Tal vez haya estado mirando mi pantalla demasiado tiempo hoy, pero me tomó una hora encontrar esta solución muy simple form['my_field'].value()para acceder a los valores de los formularios en la solicitud POST. Algunos días: |
ionalchemist
28

Puede hacer esto después de validar sus datos.

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

Además, lea los documentos de django. Son perfectos.

ikostia
fuente
13
¿Qué pasa con b4 si limpia sus datos?
Robert Johnstone
2
Antes de limpiar sus datos, solo hay request.POST que se almacena con la instancia del formulario. La limpieza es lo que asocia los datos POST con los campos del formulario. Antes de limpiar tendrías que trabajar con request.POST.
2014
¿Es posible obtener el valor de formField si se establece su inicial?
Fydo
8

Para recuperar datos del formulario que envía la solicitud de publicación, puede hacerlo así

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

Yo uso django 1.7+ y python 2.7+, la solución anterior a la dosis no funciona. Y el valor de entrada en el formulario se puede obtener usando POST como se muestra a continuación (use el mismo formulario anterior):

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

Espero que esto ayude.

zhihong
fuente