วิธีรับค่าจากฟิลด์แบบฟอร์มใน django framework?


105

ฉันจะรับค่าจากฟิลด์ฟอร์มใน django framework ได้อย่างไร ฉันต้องการทำสิ่งนี้ในมุมมองไม่ใช่ในเทมเพลต ...

คำตอบ:


130

การใช้ฟอร์มในมุมมองอธิบายได้ค่อนข้างดี

รูปแบบมาตรฐานสำหรับการประมวลผลฟอร์มในมุมมองมีลักษณะดังนี้:

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

ตัวอย่างแบบฟอร์มที่ผูกไว้:class ContactForm(forms.Form): my_form_field_name = forms.CharField()
Bob Stein

เหตุใดเทมเพลตจึงเรียกใช้ {{form.name_of_field}} ได้ในเมื่อฟิลด์อยู่ใน form.data หรือ form.cleaned_data
user3245268

57

เลือกของคุณ:

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

หมายเหตุ: สามารถเข้าถึงฟิลด์ได้ทันทีที่พร้อมใช้งาน


4
คำตอบนี้สรุปตัวเลือกทั้งหมดได้ดีที่สุด - การเข้าถึงข้อมูลดิบ POST ฟิลด์แบบฟอร์มที่ไม่ผ่านการตรวจสอบและฟิลด์ฟอร์มที่ตรวจสอบแล้วในที่สุด
Serge Merzliakov

2
บางทีฉันอาจจะดูหน้าจอนานเกินไปในวันนี้ แต่ฉันใช้เวลาหนึ่งชั่วโมงในการค้นหาวิธีง่ายๆนี้ในการform['my_field'].value()เข้าถึงค่าแบบฟอร์มในคำขอ POST บางวัน: |
ionalchemist

28

คุณสามารถทำได้หลังจากตรวจสอบความถูกต้องของข้อมูลแล้ว

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

นอกจากนี้โปรดอ่านเอกสาร django พวกเขามีความสมบูรณ์แบบ.


13
แล้ว b4 คุณล้างข้อมูลของคุณล่ะ?
Robert Johnstone

2
ก่อนที่คุณจะล้างข้อมูลของคุณทั้งหมดมีเพียงคำขอเท่านั้น POST ที่ถูกเก็บไว้กับอินสแตนซ์แบบฟอร์ม การทำความสะอาดคือสิ่งที่เชื่อมโยงข้อมูล POST กับฟิลด์แบบฟอร์ม ก่อนทำความสะอาดคุณจะต้องดำเนินการตามคำขอ POST
freb

เป็นไปได้ไหมที่จะได้รับค่าของ formField หากตั้งค่าเริ่มต้น
Fydo

8

ในการดึงข้อมูลจากแบบฟอร์มที่ส่งคำขอโพสต์คุณสามารถทำได้เช่นนี้

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

ฉันใช้ django 1.7+ และ python 2.7+ วิธีแก้ปัญหาข้างต้นไม่ได้ผล และค่าอินพุตในรูปแบบสามารถใช้ POST ด้านล่าง (ใช้แบบฟอร์มเดียวกันด้านบน):

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

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.