Menu
CoddyTech

Einen Gast entfernen

Teil des Abschnitts Formulare der Django-Journey von Coddy. Lektion 20 von 20.

Die organisierende Person muss Gäste von der Gästeseite entfernen können. Jede Zeile erhält ihr eigenes kleines Formular, dessen action eine URL für genau diese Zeile ist, sodass eine Schaltfläche nur Daten zu ihrer Zeile sendet. Eine Aufgabenliste mit einer Schaltfläche „Erledigt“ für jede Aufgabe:

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

Eine Ansicht wie finish zeigt keine Seite an: Sie ändert Daten und leitet weiter. @require_POST aus django.views.decorators.http weist jede andere Anfrage mit 405 Method Not Allowed zurück, sodass ein Link oder eine eingegebene Adresse niemanden entfernt:

@require_POST
def finish(request, pk):

Füge nach der Aktion wie zuvor eine Nachricht hinzu und leite weiter.

challenge icon

Aufgabe

Schwer

Einen Gast entfernen.

  1. Füge in events/urls.py rsvps/<int:pk>/remove/ mit dem Namen remove_rsvp hinzu.
  2. Schreibe in events/views.py remove_rsvp mit @require_POST (aus django.views.decorators.http). Die Funktion löscht die RSVP, fügt die Nachricht Ada was removed from the guest list. mit dem Namen des Gasts hinzu und leitet zur Gästeseite weiter.
  3. Füge in guest_list.html für jeden Gast ein POST-Formular mit {% csrf_token %} und einer Schaltfläche Remove hinzu, die an dessen URL sendet.

Entferne Ada: Nur Grace ist noch da.

Probier es selbst

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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Formulare

Übe selbstständig: Django-Playground