Bagaimana cara mendapatkan nilai dari bidang formulir dalam kerangka kerja django?


104

Bagaimana cara mendapatkan nilai dari bidang formulir dalam kerangka kerja django? Saya ingin melakukan ini dalam tampilan, bukan dalam template ...

Jawaban:


129

Menggunakan formulir dalam tampilan cukup banyak menjelaskannya.

Pola standar untuk memproses formulir dalam tampilan terlihat seperti ini:

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

Contoh formulir penjilidan:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein

Mengapa template dapat menjalankan {{form.name_of_field}}, padahal bidang sebenarnya dalam form.data atau form.cleaned_data?
pengguna3245268

56

Ambil pilihanmu:

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

Catatan: bidang ini diakses segera setelah tersedia.


4
Jawaban ini merangkum semua opsi terbaik - mengakses data POST mentah, bidang formulir yang tidak divalidasi, dan akhirnya bidang formulir yang divalidasi.
Serge Merzliakov

2
Mungkin saya baru saja melihat layar saya terlalu lama hari ini, tetapi saya membutuhkan satu jam untuk menemukan solusi yang sangat sederhana ini form['my_field'].value()untuk mengakses nilai formulir pada permintaan POST. Beberapa hari: |
ionalchemist

28

Anda dapat melakukan ini setelah Anda memvalidasi data Anda.

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

Juga, baca dokumen django. Mereka sempurna.


13
Bagaimana dengan b4 Anda membersihkan data Anda?
Robert Johnstone

2
Sebelum Anda membersihkan semua data Anda hanya ada request.POST yang disimpan dengan contoh formulir. Pembersihan adalah apa yang mengaitkan data POST dengan bidang formulir. Sebelum membersihkan Anda harus bekerja dengan permintaan.
freb

Apakah mungkin untuk mendapatkan nilai formField jika inisialnya disetel?
Fydo

8

Untuk mengambil data dari form yang mengirim permintaan posting Anda dapat melakukannya seperti ini

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

Saya menggunakan django 1.7+ dan python 2.7+, solusi di atas tidak berfungsi. Dan nilai input dalam formulir bisa didapat menggunakan POST seperti di bawah ini (gunakan formulir yang sama di atas):

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

Semoga ini membantu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.