Rimuovere un invitato
Fa parte della sezione Form del percorso Django di Coddy. Lezione 20 di 20.
L’organizzatore deve rimuovere delle persone dalla pagina degli invitati. Ogni riga ha il proprio piccolo modulo, il cui action è un URL per quella singola riga, così un pulsante invia dati solo per la propria riga. Una lista di cose da fare con un pulsante Done 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 ha una pagina: si limita ad agire. @require_POST da django.views.decorators.http risponde a qualsiasi altro metodo con 405 prima che la vista venga eseguita, così un link o un indirizzo digitato non rimuovono nessuno:
@require_POST
def finish(request, pk):Dopo aver agito, aggiungi un messaggio e reindirizza, come prima.
Sfida
Difficile- Nella pagina degli ospiti, ogni ospite ha un pulsante
Removeche invia una richiesta a/rsvps/<pk>/remove/(nome URLremove_rsvp). - Questa vista accetta solo richieste POST. Elimina la RSVP, aggiunge
Ada was removed from the guest list.con il nome dell'ospite e reindirizza alla pagina degli ospiti dell'evento.
Premi Run e rimuovi un ospite.
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