Menu
CoddyTech

Rimuovere un invitato

Fa parte della sezione Form del percorso Django di Coddy. Lezione 20 di 20.

L'organizzatore deve rimuovere persone dalla pagina degli invitati. Ogni riga ha il proprio piccolo modulo, il cui action è un URL per quella specifica riga, così un pulsante invia dati solo per la propria riga. Una lista di cose da fare con un pulsante «Fatto» per ogni attività:

{% 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 %}

Una vista come finish non mostra alcuna pagina: modifica i dati e reindirizza. @require_POST, da django.views.decorators.http, rifiuta qualsiasi altra richiesta con 405 Method Not Allowed, così un link o un indirizzo digitato non rimuove nessuno:

@require_POST
def finish(request, pk):

Dopo aver eseguito l'azione, aggiungi un messaggio e reindirizza, come prima.

challenge icon

Sfida

Difficile

Rimuovi un ospite.

  1. In events/urls.py, aggiungi rsvps/<int:pk>/remove/ con nome remove_rsvp.
  2. In events/views.py, scrivi remove_rsvp con @require_POST (da django.views.decorators.http). Elimina l’RSVP, aggiunge il messaggio Ada was removed from the guest list. con il nome dell’ospite e reindirizza alla pagina degli ospiti.
  3. In guest_list.html, aggiungi a ogni ospite un modulo POST con {% csrf_token %} e un pulsante Remove che invia i dati al suo URL.

Rimuovi Ada: resta solo Grace.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Form

Esercitati da solo: Playground Django