Menu
CoddyTech

אירוע מלא

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

בכיתת הקרמיקה יש 2 מקומות ו-2 אורחים, ובכל זאת הטופס שלה עדיין מקבל יותר. הכלל שייך לטופס, אבל רק התצוגה יודעת לאיזה אירוע מיועד הטופס.

טופס הוא מחלקה, ולכן הוא יכול לקבל ארגומנטים נוספים. העבירו את שלכם כמילת מפתח אל __init__, שמרו אותו ב-self והעבירו את השאר אל __init__ של Django. טופס הצעת מחיר שזקוק לפריט המכירה הפומבית:

class BidForm(forms.Form):
    amount = forms.IntegerField()

    def __init__(self, *args, item=None, **kwargs):
        super().__init__(*args, **kwargs)
        self.item = item

    def clean_amount(self):
        amount = self.cleaned_data["amount"]
        if amount <= self.item.top_bid:
            raise forms.ValidationError("Bid more than the top bid.")
        return amount

התצוגה מעבירה את הפריט בכל פעם שהיא בונה את הטופס: BidForm(request.POST, item=item). ציון item בחתימה מונע ממנו להיכלל ב-**kwargs; טופס Django אינו מכיר אותו ויעלה TypeError.

challenge icon

אתגר

בינוני

דחה בקשות RSVP לאירוע מלא באמצעות Sorry, this event is full.:

  • העבר את האירוע אל RSVPForm כארגומנט מילת מפתח event, והשתמש בו בבדיקה של הטופס כולו.
  • אירוע שנותר בו מקום אחד עדיין יכול לקבל אורח נוסף אחד.
  • העבר את האירוע בכל מקום שבו event_detail יוצר את הטופס.

לחץ על Run ושלח בקשת RSVP לשיעור הקדרות.

נסו בעצמכם

import datetime

from django import forms

from .models import RSVP, Event


class EventForm(forms.ModelForm):
    class Meta:
        model = Event
        fields = ["title", "date", "end_date", "place", "description", "capacity"]

    def clean_date(self):
        date = self.cleaned_data["date"]
        if date < datetime.date.today():
            raise forms.ValidationError("The date cannot be in the past.")
        return date

    def clean(self):
        cleaned_data = super().clean()
        date = cleaned_data.get("date")
        end_date = cleaned_data.get("end_date")
        if date and end_date and end_date < date:
            raise forms.ValidationError("The event cannot end before it starts.")
        return cleaned_data


class RSVPForm(forms.ModelForm):
    class Meta:
        model = RSVP
        fields = ["name", "email"]
quiz iconבחנו את עצמכם

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

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

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