Menu
CoddyTech

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.

challenge icon

Défi

Difficile

Supprimer un invité.

  1. Dans events/urls.py, ajoutez rsvps/<int:pk>/remove/ sous le nom remove_rsvp.
  2. Dans events/views.py, écrivez remove_rsvp avec @require_POST (depuis django.views.decorators.http). La fonction supprime le 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.
  3. Dans guest_list.html, ajoutez pour chaque invité un formulaire POST avec {% csrf_token %} et un bouton Remove qui 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})
quiz iconTestez-vous

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

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