Menu
CoddyTech

Halaman Tamu

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

Penyelenggara menginginkan halaman untuk setiap acara yang hanya mencantumkan tamunya, tempat untuk mengelola mereka. Kamu sudah mengetahui setiap bagiannya: URL dengan pk acara, view yang menemukan acara, dan perulangan template pada event.rsvps.all.

Template guest_list.html sudah disiapkan untukmu, tetapi daftarnya kosong. Daftar tamu terkait dengan satu acara, jadi ambil data tamu melalui acara tersebut, bukan dari semua RSVP.

challenge icon

Tantangan

Sedang

Buat halaman tamu untuk setiap acara.

  1. Di events/urls.py, tambahkan events/<int:pk>/guests/ dengan nama guests.
  2. Di events/views.py, tulis view-nya: cari acara berdasarkan pk atau tampilkan 404, lalu render events/guest_list.html dengan acara tersebut.
  3. Di guest_list.html, tambahkan satu <li> untuk setiap tamu, seperti Ada (ada@example.com). Ambil data tamu melalui acara.
  4. Di event_detail.html, tautkan Manage guests ke url events:guests.

Tekan Manage guests: kamu akan melihat Ada dan Grace.

Coba sendiri

from django.contrib import messages
from django.shortcuts import get_object_or_404, redirect, render

from .forms import EventForm, RSVPForm
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)
    if request.method == "POST":
        form = RSVPForm(request.POST, event=event)
        if form.is_valid():
            rsvp = form.save(commit=False)
            rsvp.event = event
            rsvp.save()
            messages.success(request, "You're on the list!")
            return redirect("events:detail", pk=event.pk)
    else:
        form = RSVPForm(event=event)
    return render(request, "events/event_detail.html", {"event": event, "form": form})


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