Menu
CoddyTech

Formulir Terikat dan Tidak Terikat

Termasuk bagian Formulir dalam perjalanan Django di Coddy. Pelajaran 7 dari 20.

Kirim formulir dengan tanggal next friday: halaman kembali kosong, hanya menampilkan "Please check the form." View memeriksa formulir yang memuat apa yang kamu ketik, lalu membuangnya dan menampilkan formulir baru yang kosong.

Formulir yang dibuat dengan data disebut terikat: ContactForm(request.POST) menyimpan apa yang diketik pengunjung dan, setelah is_valid(), error-nya. ContactForm() disebut tidak terikat: kosong, tanpa error. Saat ditampilkan dengan {{ form }}, formulir terikat menampilkan setiap nilai dan, di samping kolom yang salah, error-nya, seperti Enter a valid date.

Jadi, view dengan formulir memiliki tiga kasus:

  • GET: tampilkan formulir yang tidak terikat.
  • POST yang gagal: tampilkan formulir terikat yang diperiksanya.
  • POST yang berhasil: simpan dan arahkan ulang.

Satu render() di bagian akhir menangani dua kasus pertama.

challenge icon

Tantangan

Mudah

Pertahankan teks yang diketik pengunjung setelah terjadi error.

  1. Di new_event, tampilkan form yang kamu periksa setelah POST gagal, dan EventForm kosong saat GET.
  2. Hapus pesan error dari view dan dari new_event.html: sekarang form menampilkan error-nya sendiri.

Kirim next friday sebagai tanggal: judulmu tetap ada, dan Enter a valid date. muncul di atas kotak Date.

Coba sendiri

from django.shortcuts import get_object_or_404, redirect, render

from .forms import EventForm
from .models import Event


def event_list(request):
    q = request.GET.get("q", "")
    events = Event.objects.all()
    if q:
        events = events.filter(title__icontains=q)
    return render(request, "events/event_list.html", {"events": events, "q": q})


def event_detail(request, pk):
    event = get_object_or_404(Event, pk=pk)
    return render(request, "events/event_detail.html", {"event": event})


def new_event(request):
    error = None
    if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
            event = Event.objects.create(
                title=form.cleaned_data["title"],
                date=form.cleaned_data["date"],
                place=form.cleaned_data["place"],
            )
            return redirect("events:detail", pk=event.pk)
        error = "Please check the form."
    return render(request, "events/new_event.html", {"error": error, "form": EventForm()})
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Formulir

Latihan sendiri: Playground Django