Supprimer un invité
Fait partie de la section Formulaires du Journey Django de Coddy. Leçon 20 sur 20.
L’organisateur doit retirer des personnes de la page des invités. Chaque ligne possède son propre petit formulaire dont l’action est une URL correspondant à cette ligne, de sorte qu’un bouton envoie une requête concernant uniquement 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’a pas de page : elle effectue simplement une action. @require_POST de django.views.decorators.http répond avec le statut 405 à toute autre méthode avant l’exécution de la vue, ainsi un lien ou une adresse saisie ne supprimera jamais personne :
@require_POST
def finish(request, pk):Après l’action, ajoute un message et redirige, comme précédemment.
Défi
Difficile- Sur la page des invités, chaque invité dispose d’un bouton
Removequi envoie une requête POST à/rsvps/<pk>/remove/(nom d’URLremove_rsvp). - Cette vue accepte uniquement les requêtes POST. Elle supprime la réponse RSVP, ajoute le message
Ada was removed from the guest list.avec le nom de l’invité, puis redirige vers la page des invités de l’événement.
Cliquez sur Run et supprimez un invité.
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