Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Gib jeder Veranstaltung eine Gästeseite.

  1. Füge in events/urls.py events/<int:pk>/guests/ mit dem Namen guests hinzu.
  2. Schreibe in events/views.py die zugehörige Ansicht: Suche die Veranstaltung anhand von pk oder gib einen 404-Fehler zurück und rendere events/guest_list.html mit der Veranstaltung.
  3. Füge in guest_list.html für jeden Gast ein <li> hinzu, zum Beispiel Ada (ada@example.com). Rufe die Gäste über die Veranstaltung ab.
  4. Verlinke in event_detail.html den Text „Gäste verwalten“ mit der URL events: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