Menu
CoddyTech

Une page pour les invités

Fait partie de la section Formulaires du Journey Django de Coddy. Leçon 19 sur 20.

L’organisateur souhaite une page pour chaque événement qui répertorie uniquement ses invités, un endroit où les gérer. Vous connaissez chaque élément : une URL avec le pk de l’événement, une vue qui trouve l’événement et une boucle de modèle sur event.rsvps.all.

Le modèle guest_list.html est commencé pour vous ; sa liste est vide. Une liste d’invités appartient à un seul événement : récupérez donc les invités via l’événement, jamais à partir de toutes les réponses RSVP.

challenge icon

Défi

Moyen
  • /events/<pk>/guests/, dont le nom d’URL est guests, répertorie les invités de l’événement avec leurs adresses e-mail, dans guest_list.html.
  • Chaque page d’événement y renvoie avec le lien Manage guests.

Cliquez sur Exécuter, ouvrez Friday Jazz Night, puis cliquez sur Manage guests.

Essayez vous-même

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})

Toutes les leçons de Formulaires

Entraînez-vous par vous-même : Playground Django