Tidak dapat membuat is_valid() kembali ke templat dengan formulir terikat

Di dokumen Django, tertulis

Kami memanggil metode is_valid() formulir; jika belum benar kita kembali ke template yang ada formnya. Kali ini form sudah tidak kosong lagi (unbound) sehingga form HTML akan terisi dengan data yang telah dikirimkan sebelumnya, sehingga dapat diedit dan diperbaiki sesuai kebutuhan.

Saya mencoba membuat perilaku ini berhasil.

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

Di formulir.py:

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

Di tes.html:

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

Sekarang, ketika saya mengirimkan formulir dengan nomor lebih dari 1 digit, is_valid() bernilai False. Ketika itu terjadi, dokumen mengatakan templat harus dirender dengan formulir terikat dan kesalahannya. Sebaliknya, tidak ada yang terjadi, dan saya mendapatkan ValueError: The view auctions.views.test didn't return an HttpResponse object. It returned None instead.


person Ryan Eom    schedule 07.09.2020    source sumber
comment
Apakah return render(request, 'auctions/test.html', {'form': form}) seharusnya diberi tab di baris terakhir kode views.py   -  person AyanSh    schedule 07.09.2020
comment
@AyanSh Tidak. Yap. Itu saja. Jika Anda ingin memposting jawaban, saya dapat menerimanya. Tidak percaya aku telah berjuang dengan hal ini begitu lama.   -  person Ryan Eom    schedule 07.09.2020
comment
Oke, saya akan memposting jawabannya np   -  person AyanSh    schedule 07.09.2020


Jawaban (1)


Kesalahan Anda adalah baris terakhir file views.py Anda menjorok ke dalam.

Alih-alih:

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

Harus:

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