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.
Tantangan
SedangBuat halaman tamu untuk setiap acara.
- Di
events/urls.py, tambahkanevents/<int:pk>/guests/dengan namaguests. - Di
events/views.py, tulis view-nya: cari acara berdasarkanpkatau tampilkan 404, lalu renderevents/guest_list.htmldengan acara tersebut. - Di
guest_list.html, tambahkan satu<li>untuk setiap tamu, sepertiAda (ada@example.com). Ambil data tamu melalui acara. - Di
event_detail.html, tautkanManage guestske urlevents: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