Menu
CoddyTech

Eine Gästeseite

Teil des Abschnitts Formulare der Django-Journey von Coddy. Lektion 19 von 20.

Der Veranstalter möchte für jedes Event eine Seite, auf der nur dessen Gäste aufgelistet sind und auf der sie verwaltet werden können. Du kennst alle Bausteine: eine URL mit dem pk des Events, eine View, die das Event findet, und eine Template-Schleife über event.rsvps.all.

Das Template guest_list.html wurde für dich begonnen; seine Liste ist leer. Eine Gästeliste gehört zu einem Event. Lies die Gäste also über das Event aus, niemals über alle RSVPs.

challenge icon

Aufgabe

Mittel
  • /events/<pk>/guests/, der URL-Name guests, listet die Gäste der Veranstaltung mit ihren E-Mail-Adressen in guest_list.html auf.
  • Jede Veranstaltungsseite enthält einen Link dorthin mit der Beschriftung Manage guests.

Klicke auf „Run“, öffne Friday Jazz Night und klicke auf „Manage guests“.

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