Menu
CoddyTech

CreateView

חלק מהיחידה תצוגות מבוססות מחלקות במסלול ה-Django של Coddy. שיעור 10 מתוך 18.

בתפריט יש קישור Post a job שאין מאחוריו עמוד. עמוד שמוסיף שורה משתמש בכל פעם באותו קוד: הצגת טופס ריק, בדיקת מה שנשלח, שמירתו והפניה מחדש. CreateView הוא הקוד הזה, יחד עם ModelForm שהוא בונה בשבילך:

from django.views.generic import CreateView


class RecipeCreateView(CreateView):
    model = Recipe
    fields = ["title", "cuisine", "minutes"]

fields מפרט את השדות של הטופס, כמו Meta של ModelForm. ברירת המחדל של התבנית היא recipes/recipe_form.html, כשהטופס זמין בשם form. נתונים לא תקינים יציגו שוב את הטופס עם השגיאות שלהם, ושום דבר לא יישמר.

הציבו את הנתיב "recipes/new/" מעל "recipes/<slug:slug>/". Django משתמש בנתיב הראשון שמתאים. new הוא slug תקין, לכן נתיב slug שמופיע לפני הנתיב הזה יתפוס את /recipes/new/ ויחזיר 404.

challenge icon

אתגר

בינוני

צרו את הדף שמאחורי Post a job, בעזרת התבנית המוכנה jobs/job_form.html.

  1. ב־jobs/views.py, הוסיפו את JobCreateView, תצוגת CreateView עבור Job עם השדות title, company, city, salary ו־description.
  2. ב־jobs/urls.py, הוסיפו את הנתיב "jobs/new/" בשם create.

פרסום משרה: היא נשמרת, ואז Django נעצרת עם No URL to redirect to, והבעיה תתוקן בשיעור הבא.

נסו בעצמכם

from django.views.generic import DetailView, ListView, TemplateView

from .models import Job


class HomeView(TemplateView):
    template_name = "jobs/home.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["count"] = Job.objects.count()
        context["latest"] = Job.objects.order_by("-posted").first()
        return context


class AboutView(TemplateView):
    template_name = "jobs/about.html"


class JobListView(ListView):
    model = Job
    context_object_name = "jobs"
    ordering = ["-posted"]
    paginate_by = 5

    def get_queryset(self):
        jobs = super().get_queryset()
        city = self.request.GET.get("city")
        if city:
            jobs = jobs.filter(city=city)
        return jobs


class JobDetailView(DetailView):
    model = Job

כל השיעורים ביחידה תצוגות מבוססות מחלקות

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