Eine Gästeseite
Teil des Abschnitts Formulare der Django-Journey von Coddy. Lektion 19 von 20.
Der Veranstalter möchte für jede Veranstaltung eine Seite, auf der nur ihre Gäste aufgelistet sind und auf der sie verwaltet werden können. Du kennst alle Bausteine: eine URL mit der pk der Veranstaltung, eine View, die die Veranstaltung findet, und eine Template-Schleife über event.rsvps.all.
Das Template guest_list.html wurde für dich angelegt; seine Liste ist leer. Eine Gästeliste gehört zu genau einer Veranstaltung. Rufe die Gäste also über die Veranstaltung ab, niemals über alle RSVPs.
Aufgabe
MittelGib jeder Veranstaltung eine Gästeseite.
- Füge in
events/urls.pyevents/<int:pk>/guests/mit dem Namenguestshinzu. - Schreibe in
events/views.pydie zugehörige Ansicht: Suche die Veranstaltung anhand vonpkoder gib einen 404-Fehler zurück und rendereevents/guest_list.htmlmit der Veranstaltung. - Füge in
guest_list.htmlfür jeden Gast ein<li>hinzu, zum BeispielAda (ada@example.com). Rufe die Gäste über die Veranstaltung ab. - Verlinke in
event_detail.htmlden Text „Gäste verwalten“ mit der URLevents:guests.
Klicke auf „Gäste verwalten“: Du siehst Ada und Grace.
Probier es selbst
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})
Alle Lektionen in Formulare
Übe selbstständig: Django-Playground