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 veut une page pour chaque événement qui liste uniquement ses invités, un endroit où les gérer. Tu connais tous les éléments : 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 toi ; sa liste est vide. Une liste d’invités appartient à un seul événement : récupère donc les invités via l’événement, jamais parmi toutes les réponses aux invitations.

challenge icon

Défi

Moyen

Attribue une page de participants à chaque événement.

  1. Dans events/urls.py, ajoute events/<int:pk>/guests/ avec le nom guests.
  2. Dans events/views.py, écris sa vue : recherche l’événement par pk ou renvoie une erreur 404, puis affiche events/guest_list.html avec cet événement.
  3. Dans guest_list.html, ajoute un <li> par participant, comme Ada (ada@example.com). Récupère les participants à partir de l’événement.
  4. Dans event_detail.html, crée un lien intitulé Manage guests vers l’URL events:guests.

Clique sur Gérer les participants : tu vois Ada et Grace.

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