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>/". new הוא slug תקין, ולכן אם הנתיב יופיע אחריו, תצוגת הפרטים תטפל ב-/recipes/new/ ותחזיר 404.

challenge icon

אתגר

בינוני

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

  • ‏JobCreateView, ‏CreateView של Job עם השדות title, ‏company, ‏city, ‏salary ו־description.
  • נתיב "jobs/new/" בשם create.

לחצו על Run ופרסמו משרה. היא נשמרת, ואז 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 אונליין