Supprimer un invité
Fait partie de la section Formulaires du Journey Django de Coddy. Leçon 20 sur 20.
L’organisateur doit pouvoir retirer des personnes de la page des invités. Chaque ligne possède son propre petit formulaire dont l’action est une URL pour cette ligne seulement, afin qu’un bouton n’envoie une requête que pour sa ligne. Une liste de tâches avec un bouton Terminé pour chaque tâche :
{% for task in tasks %}
<li>
{{ task.title }}
<form method="post" action="{% url 'todo:finish' task.pk %}">
{% csrf_token %}
<button type="submit">Done</button>
</form>
</li>
{% endfor %}Une vue comme finish n’affiche aucune page : elle modifie les données et redirige. @require_POST, provenant de django.views.decorators.http, refuse toute autre requête avec le code 405 Method Not Allowed, de sorte qu’un lien ou une adresse saisie ne supprime jamais personne :
@require_POST
def finish(request, pk):Après l’action, ajoute un message et redirige, comme précédemment.
Défi
DifficileSupprimer un invité.
- Dans
events/urls.py, ajoutezrsvps/<int:pk>/remove/sous le nomremove_rsvp. - Dans
events/views.py, écrivezremove_rsvpavec@require_POST(depuisdjango.views.decorators.http). La fonction supprime le RSVP, ajoute le messageAda was removed from the guest list.avec le nom de l’invité, puis redirige vers la page des invités. - Dans
guest_list.html, ajoutez pour chaque invité un formulaire POST avec{% csrf_token %}et un boutonRemovequi envoie une requête à son URL.
Supprimez Ada : il ne reste que 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})
def guest_list(request, pk):
event = get_object_or_404(Event, pk=pk)
return render(request, "events/guest_list.html", {"event": event})
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
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