Menu
CoddyTech

טפסים קשורים ולא קשורים

חלק מהיחידה טפסים במסלול ה-Django של Coddy. שיעור 7 מתוך 20.

שלח את הטופס עם התאריך next friday: הדף חוזר ריק, ורק מופיע בו "נא לבדוק את הטופס." התצוגה יצרה טופס חדש וריק, והטופס שהיא בדקה הכיל את הפרטים.

טופס שנבנה עם נתונים הוא קשור: ContactForm(request.POST) מכיל את מה שהמבקר הקליד, ואחרי is_valid() גם את השגיאות. ContactForm() הוא לא קשור: ריק, ללא שגיאות. כשהוא מוצג באמצעות {{ form }}, טופס קשור מציג כל ערך ומתחת לשדה שגוי את השגיאה שלו, כמו Enter a valid date.

לכן לתצוגה עם טופס יש שלושה מצבים:

  • בקשת GET: הצגת טופס לא קשור.
  • בקשת POST שנכשלת: הצגת הטופס הקשור שהיא בדקה.
  • בקשת POST שמצליחה: שמירה והפניה מחדש.

קריאה אחת ל־render() בסוף מטפלת בשני המצבים הראשונים.

challenge icon

אתגר

קל
  • ב־new_event, הצג את הטופס שנבדק לאחר ששליחת POST נכשלה, וטופס ריק בעת בקשת GET.
  • הסר את הודעת error מהתצוגה ומ־new_event.html: כעת הטופס מציג את השגיאות שלו.

לחץ על Run, שלח את הטופס עם התאריך next friday, ובדוק מתחת לתאריך.

נסו בעצמכם

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()})
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה טפסים

תרגלו בעצמכם: Django אונליין