Menu
CoddyTech

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.

challenge icon

Défi

Difficile
  • Sur la page des invités, chaque invité dispose d’un bouton Remove qui envoie une requête POST à /rsvps/<pk>/remove/ (nom d’URL remove_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})
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