Menu
CoddyTech

Formulir Konfirmasi Kehadiran

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

Pengunjung ingin menyatakan bahwa mereka akan datang. Proyek ini memiliki model RSVP baru dengan ForeignKey ke Event (related_name="rsvps"), dan setiap halaman acara memiliki formulir di bawah Akan datang?.

Formulir RSVP meminta nama dan email, bukan acara: pengunjung sedang berada di halaman acara tersebut, dan sebuah field akan memungkinkan mereka memilih acara lain. Jangan masukkan ke dalam fields hal yang ditentukan oleh view, lalu tetapkan nilainya di view.

form.save(commit=False) membuat object tanpa menyimpannya, jadi kamu bisa menetapkan sisanya terlebih dahulu. Formulir pesanan toko tidak pernah menanyakan status:

form = OrderForm(request.POST)
if form.is_valid():
    order = form.save(commit=False)
    order.status = "new"
    order.save()

form.save() biasa langsung menyimpan baris, dan ForeignKey wajib yang dibiarkan kosong akan menyebabkan IntegrityError.

challenge icon

Tantangan

Sedang
  • Di events/forms.py, tambahkan RSVPForm, sebuah ModelForm untuk RSVP yang hanya meminta name dan email.
  • Di event_detail, kirimkan formulir ke template sebagai form. POST yang valid akan menyimpan RSVP untuk acara ini, menambahkan pesan You're on the list!, lalu mengarahkan ke halaman acara.

Tekan Jalankan, buka sebuah acara, lalu RSVP.

Coba sendiri

from django.contrib import messages
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):
    if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
            event = form.save()
            messages.success(request, "Your event was added.")
            return redirect("events:detail", pk=event.pk)
    else:
        form = EventForm()
    return render(request, "events/new_event.html", {"form": form})


def edit_event(request, pk):
    event = get_object_or_404(Event, pk=pk)
    if request.method == "POST":
        form = EventForm(request.POST, instance=event)
        if form.is_valid():
            form.save()
            messages.success(request, "Your changes were saved.")
            return redirect("events:detail", pk=event.pk)
    else:
        form = EventForm(instance=event)
    return render(request, "events/edit_event.html", {"form": form, "event": event})


def delete_event(request, pk):
    event = get_object_or_404(Event, pk=pk)
    if request.method == "POST":
        event.delete()
        messages.success(request, "The event was deleted.")
        return redirect("events:list")
    return render(request, "events/delete_event.html", {"event": event})

Semua pelajaran di Formulir

Latihan sendiri: Playground Django