Menu
CoddyTech

Bir Etkinliği Silme

Coddy'nin Django Journey'sinin Formlar bölümünün bir parçası. Ders 14 / 20.

Bağlantı bir GET isteğidir ve GET isteği verileri asla değiştirmemelidir. Tarayıcılar bağlantıları önceden yükler, sohbet uygulamaları önizleme göstermek için bağlantıları açar ve arama motorları buldukları her bağlantıyı izler. Bir etkinliği silen bağlantı, kimse buna karar vermeden etkinliği silerdi.

Bu nedenle bir değişiklik iki adımda gerçekleşir: GET isteği, onay isteyen bir sayfa gösterir; formdaki bir düğmeyle gönderilen POST isteği ise işlemi gerçekleştirir. Bir faturayı ödendi olarak işaretleyen faturalandırma uygulaması:

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})

Onay formunda alana gerek yoktur; yalnızca belirteç ve bir düğme yeterlidir. action niteliği olmayan bir form, bulunduğu sayfaya POST isteği gönderir. Bir satırın .delete() yöntemi onu siler. Sildikten sonra hâlâ var olan bir sayfaya yönlendirin.

challenge icon

Görev

Kolay

Bu etkinliği sil bağlantısı ve sayfası hazır:

  • delete_event içinde GET yalnızca sayfayı gösterir. POST etkinliği siler ve etkinlikler listesine yönlendirir.
  • delete_event.html içinde, bu sayfaya POST isteği gönderen ve Delete düğmesi içeren bir form ekle.

Çalıştır'a bas, bir etkinlik aç ve onu sil.

Kendin dene

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)
    # Etkinliği yalnızca form gönderildiğinde sil, ardından listeye geri dön.
    return render(request, "events/delete_event.html", {"event": event})

Formlar bölümündeki tüm dersler

Kendi başına pratik yap: Django playground