Menu
CoddyTech

Hapus Tamu

Termasuk bagian Formulir dalam perjalanan Django di Coddy. Pelajaran 20 dari 20.

Pengelola perlu menghapus orang dari halaman tamu. Setiap baris memiliki formulir kecilnya sendiri yang action-nya adalah URL untuk baris itu saja, sehingga tombol hanya mengirimkan data untuk barisnya. Berikut daftar tugas dengan tombol Selesai untuk setiap tugas:

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

View seperti finish tidak menampilkan halaman: view ini mengubah data lalu mengarahkan ulang. @require_POST, dari django.views.decorators.http, menolak permintaan lain dengan 405 Method Not Allowed, sehingga tautan atau alamat yang diketik tidak akan menghapus siapa pun:

@require_POST
def finish(request, pk):

Setelah melakukan tindakan, tambahkan pesan dan arahkan ulang, seperti sebelumnya.

challenge icon

Tantangan

Sulit

Hapus seorang tamu.

  1. Di events/urls.py, tambahkan rsvps/<int:pk>/remove/ dengan nama remove_rsvp.
  2. Di events/views.py, tulis remove_rsvp dengan @require_POST (dari django.views.decorators.http). Fungsi ini menghapus RSVP, menambahkan pesan Ada was removed from the guest list. dengan nama tamu, lalu mengarahkan ke halaman tamu.
  3. Di guest_list.html, tambahkan formulir POST untuk setiap tamu dengan {% csrf_token %} dan tombol Remove yang mengirimkan formulir ke url-nya.

Hapus Ada: hanya Grace yang tersisa.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Formulir

Latihan sendiri: Playground Django