טפסים קשורים ולא קשורים
חלק מהיחידה טפסים במסלול ה-Django של Coddy. שיעור 7 מתוך 20.
שלחו את הטופס עם התאריך next friday: הדף חוזר ריק, ורק ההודעה "נא לבדוק את הטופס." מופיעה בו. התצוגה בדקה את הטופס שהכיל את מה שהקלדתם, ואז השליכה אותו וציירה טופס חדש וריק.
טופס שנבנה עם נתונים הוא קשור: ContactForm(request.POST) מכיל את מה שהמבקר הקליד, ולאחר is_valid() גם את השגיאות. ContactForm() הוא לא קשור: ריק, ללא שגיאות. כשמציירים אותו באמצעות {{ form }}, טופס קשור מציג כל ערך ולצד שדה שגוי את השגיאה שלו, למשל Enter a valid date.
לכן, לתצוגה שיש בה טופס יש שלושה מצבים:
- בקשת GET: מציגים טופס לא קשור.
- בקשת POST שנכשלת: מציגים את הטופס הקשור שהתצוגה בדקה.
- בקשת POST שמצליחה: שומרים ומפנים לדף אחר.
קריאה אחת ל־render() בסוף מטפלת בשני המצבים הראשונים.
אתגר
קלשמרו את מה שהמבקר הקליד לאחר שגיאה.
- ב־
new_event, הציגו את הטופס שבדקתם לאחר כישלון של POST, וטופסEventFormריק בעת GET. - הסירו את הודעת
errorמהתצוגה ומ־new_event.html: הטופס מציג כעת את השגיאות שלו.
שלחו את next friday בתור התאריך: הכותרת שלכם נשארת, וההודעה Enter a valid date. מופיעה מעל תיבת התאריך.
נסו בעצמכם
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):
error = None
if request.method == "POST":
form = EventForm(request.POST)
if form.is_valid():
event = Event.objects.create(
title=form.cleaned_data["title"],
date=form.cleaned_data["date"],
place=form.cleaned_data["place"],
)
return redirect("events:detail", pk=event.pk)
error = "Please check the form."
return render(request, "events/new_event.html", {"error": error, "form": EventForm()})
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה טפסים
2טפסי Django
טופס Djangoיצירת טופסתרגלו בעצמכם: Django אונליין