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

kspacja.dll
sumber

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,
    })
miku
sumber
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.

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

ikostia
sumber
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")
ChandyShot
sumber
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.

zhihong
sumber