Como obter valor do campo de formulário no framework Django?

104

Como obtenho valores de campos de formulário na estrutura django? Quero fazer isso em visualizações, não em modelos ...

kspacja
fonte

Respostas:

129

Usar um formulário em uma visualização explica muito bem isso.

O padrão padrão para processar um formulário em uma visualização é assim:

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
fonte
Exemplo desse formulário vinculado:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein
Por que um modelo pode executar {{form.name_of_field}}, quando os campos estão na verdade em form.data ou form.cleaned_data?
user3245268
56

Faça sua escolha:

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: o campo é acessado assim que estiver disponível.

Laffuste
fonte
4
Esta resposta resume melhor todas as opções - acesso a dados POST brutos, campos de formulário não validados e, finalmente, campos de formulário validados.
Serge Merzliakov
2
Talvez eu esteja olhando para a minha tela por muito tempo hoje, mas levei uma hora para encontrar esta solução muito simples form['my_field'].value()para acessar valores de formulário em solicitação POST. Alguns dias: |
ionalchemist
28

Você pode fazer isso depois de validar seus dados.

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

Além disso, leia a documentação do django. Eles são perfeitos.

ikostia
fonte
13
que tal b4 você limpa seus dados?
Robert Johnstone
2
Antes de limpar seus dados, há apenas request.POST que é armazenado com a instância do formulário. A limpeza é o que associa os dados POST aos campos do formulário. Antes de limpar você teria que trabalhar com request.POST.
freb
É possível obter o valor do formField se o inicial for definido?
Fydo,
8

Para recuperar os dados do formulário que envia uma solicitação de postagem, você pode fazer assim

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

Eu uso django 1.7+ e python 2.7+, a solução acima não funciona. E o valor de entrada no formulário pode ser obtido usando POST conforme abaixo (use o mesmo formulário acima):

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

Espero que isto ajude.

Zhihong
fonte