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.
Sfida
DifficileRimuovi un ospite.
- In
events/urls.py, aggiungirsvps/<int:pk>/remove/con nomeremove_rsvp. - In
events/views.py, scriviremove_rsvpcon@require_POST(dadjango.views.decorators.http). Elimina l’RSVP, aggiunge il messaggioAda was removed from the guest list.con il nome dell’ospite e reindirizza alla pagina degli ospiti. - In
guest_list.html, aggiungi a ogni ospite un modulo POST con{% csrf_token %}e un pulsanteRemoveche 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})
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