ไม่สามารถรับ is_valid() เพื่อกลับไปยังเทมเพลตที่มีแบบฟอร์มผูกไว้

ในเอกสาร Django มีข้อความว่า

เราเรียกเมธอด is_valid() ของแบบฟอร์ม หากไม่เป็น True เราจะกลับไปที่เทมเพลตพร้อมแบบฟอร์ม คราวนี้แบบฟอร์มไม่ว่างเปล่าอีกต่อไป (ไม่ถูกผูกไว้) ดังนั้นแบบฟอร์ม HTML จะถูกเติมด้วยข้อมูลที่ส่งมาก่อนหน้านี้ ซึ่งสามารถแก้ไขและแก้ไขได้ตามต้องการ

ฉันกำลังพยายามทำให้พฤติกรรมนี้ได้ผล

ใน views.py:

def test(request):
    if request.method == 'POST':
        form = TestForm(request.POST)

        if form.is_valid():
            return redirect('auctions/test.html')

    else:
        form = TestForm()
        return render(request, 'auctions/test.html', {'form': form})

ใน forms.py:

class TestForm(forms.Form):
    testnumber = forms.DecimalField(max_digits=1)

ใน test.html:

<form action="{% url 'auctions:test' %}" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit">
</form>

ตอนนี้ เมื่อฉันส่งแบบฟอร์มที่มีตัวเลขมากกว่า 1 หลัก is_valid() จะประเมินเป็น False เมื่อสิ่งนั้นเกิดขึ้น เอกสารแจ้งว่าเทมเพลตควรแสดงผลด้วยแบบฟอร์มที่ถูกผูกไว้และข้อผิดพลาด แต่กลับไม่มีอะไรเกิดขึ้น และฉันได้รับ ValueError: The view auctions.views.test didn't return an HttpResponse object. It returned None instead.


person Ryan Eom    schedule 07.09.2020    source แหล่งที่มา
comment
return render(request, 'auctions/test.html', {'form': form}) ควรอยู่ในบรรทัดสุดท้ายของโค้ด views.py   -  person AyanSh    schedule 07.09.2020
comment
@AyanSh ไม่ ใช่ นั่นก็คือมัน หากคุณต้องการโพสต์คำตอบฉันสามารถยอมรับได้ ไม่อยากจะเชื่อเลยว่าฉันต้องดิ้นรนกับเรื่องนี้มานาน   -  person Ryan Eom    schedule 07.09.2020
comment
ตกลง ฉันจะโพสต์คำตอบ np   -  person AyanSh    schedule 07.09.2020


คำตอบ (1)


ข้อผิดพลาดของคุณคือบรรทัดสุดท้ายของไฟล์ views.py ของคุณถูกเยื้อง

แทน:

def test(request):
    if request.method == 'POST':
        form = TestForm(request.POST)

        if form.is_valid():
            return redirect('auctions/test.html')

    else:
        form = TestForm()
        return render(request, 'auctions/test.html', {'form': form})

มันควรจะเป็น:

def test(request):
    if request.method == 'POST':
        form = TestForm(request.POST)

        if form.is_valid():
            return redirect('auctions/test.html')

    else:
        form = TestForm()
    return render(request, 'auctions/test.html', {'form': form})
person AyanSh    schedule 07.09.2020