מחיקת אירוע
חלק מהיחידה טפסים במסלול ה-Django של Coddy. שיעור 14 מתוך 20.
קישור הוא בקשת GET, ובקשת GET לעולם לא צריכה לשנות נתונים. דפדפנים טוענים קישורים מראש, אפליקציות צ׳אט פותחות אותם כדי להציג תצוגה מקדימה, ומנועי חיפוש עוקבים אחר כל קישור שהם מוצאים. קישור שמחק אירוע היה מוחק אותו בלי שאיש החליט לעשות זאת.
לכן שינוי מתבצע בשני שלבים: בקשת GET מציגה דף ששואל, ובקשת POST, שנשלחת באמצעות כפתור בטופס, מבצעת את הפעולה. אפליקציית חיוב שמסמנת חשבונית כמשולמת:
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})טופס האישור לא צריך שדות, אלא רק את האסימון וכפתור; טופס ללא action שולח את הנתונים לדף שבו הוא נמצא. לאחר מחיקה, יש להפנות לדף שעדיין קיים.
אתגר
קלהקישור Delete this event והעמוד שלו מוכנים.
- ב־
delete_event, בקשת GET רק מציגה את העמוד. בקשת POST מוחקת את האירוע ומפנה לרשימת האירועים. - ב־
delete_event.html, החליפו את ההערה בטופס ששולח בקשה לעמוד הזה, עם כפתורDelete.
לחצו על Delete: תגיעו לדף הבית, ו־Friday Jazz Night ייעלם.
נסו בעצמכם
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)
# יש למחוק את האירוע רק לאחר שליחת הטופס, ואז לחזור לרשימה.
return render(request, "events/delete_event.html", {"event": event})
כל השיעורים ביחידה טפסים
תרגלו בעצמכם: Django אונליין