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.
Défi
Moyen/events/<pk>/guests/, dont le nom d’URL estguests, répertorie les invités de l’événement avec leurs adresses e-mail, dansguest_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
3Formulaires de modèle
Un formulaire de modèleModifier un événementSupprimer un événementMessages de réussiteEntraînez-vous par vous-même : Playground Django