Menu
CoddyTech

Menghapus Acara

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

Tautan adalah GET, dan GET tidak boleh pernah mengubah data. Browser memuat tautan lebih awal, aplikasi obrolan membukanya untuk menampilkan pratinjau, dan mesin pencari mengikuti setiap tautan yang ditemukan. Tautan yang menghapus acara akan menghapusnya tanpa ada yang memutuskan untuk melakukannya.

Jadi, perubahan dilakukan dalam dua langkah: GET menampilkan halaman yang meminta konfirmasi, lalu POST, yang dikirim melalui tombol dalam formulir, melakukan tindakan. Aplikasi penagihan yang menandai faktur sebagai sudah dibayar:

def pay_invoice(request, pk):
    invoice = get_object_or_404(Invoice, pk=pk)
    if request.method == "POST":
        invoice.paid = True
        invoice.save()
        return redirect("bills:invoice", pk=invoice.pk)
    return render(request, "bills/confirm_pay.html", {"invoice": invoice})

Formulir konfirmasi tidak memerlukan kolom, hanya token dan tombol. Formulir tanpa action akan mengirim POST ke halaman tempat formulir itu berada. Setelah menghapus, alihkan ke halaman yang masih ada.

challenge icon

Tantangan

Mudah

Tautan Hapus acara ini dan halamannya sudah siap.

  1. Di delete_event, GET hanya menampilkan halaman. POST menghapus acara dan mengarahkan ke daftar acara.
  2. Di delete_event.html, ganti komentar dengan formulir yang mengirim data ke halaman ini, dengan tombol Delete.

Tekan Hapus: kamu akan tiba di halaman beranda, dan Friday Jazz Night sudah tidak ada.

Coba sendiri

from django.shortcuts import get_object_or_404, redirect, render

from .forms import EventForm
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)
    return render(request, "events/event_detail.html", {"event": event})


def new_event(request):
    if request.method == "POST":
        form = EventForm(request.POST)
        if form.is_valid():
            event = form.save()
            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()
            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)
    # Hapus event hanya setelah formulir dikirim, lalu kembali ke list.
    return render(request, "events/delete_event.html", {"event": event})

Semua pelajaran di Formulir

Latihan sendiri: Playground Django