Menu
CoddyTech

עמוד המשרות שלך

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

מפרסמי המודעות רוצים מקום אחד שבו יופיעו המשרות שפרסמו. בתפריט כבר מוצג למשתמשים מחוברים קישור Your jobs אל /my-jobs/, אבל עדיין אין לו מענה.

מכאן ממשיכים לבנות בעזרת מה שנלמד ביחידה הזאת, ללא דוגמה. העמוד הוא רשימה, ולכן הוא ListView. השורות שלו תלויות במי שמבקש אותן, ולכן בוחרים אותן בתוך get_queryset(), שם self.request.user זמין. רק משתמש מחובר יכול לראות את המשרות שלו. תנו לעמוד תבנית משלו: jobs/job_list.html שייכת לרשימה הציבורית.

challenge icon

אתגר

בינוני

הוסיפו את /my-jobs/, נתיב בשם mine:

  • מבקרים שלא התחברו מופנים להתחברות.
  • המשתמש רואה את הכותרת Your jobs ואת כל המשרות שלו בעמוד אחד, מהחדשה ביותר לישנה ביותר, כל אחת בתוך <li class="job"> כשהכותרת בתוך <strong>.
  • אם אין משרות: You have not posted a job yet.

לחצו על Run, התחברו בתור ada ולחצו על Your jobs.

נסו בעצמכם

from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.urls import reverse_lazy
from django.views.generic import CreateView, DeleteView, DetailView, ListView, TemplateView, UpdateView

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


class JobCreateView(LoginRequiredMixin, CreateView):
    model = Job
    fields = ["title", "company", "city", "salary", "description"]

    def form_valid(self, form):
        form.instance.posted_by = self.request.user
        return super().form_valid(form)


class JobUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Job
    fields = ["title", "company", "city", "salary", "description"]

    def test_func(self):
        return self.get_object().posted_by == self.request.user


class JobDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Job
    success_url = reverse_lazy("jobs:list")

    def test_func(self):
        return self.get_object().posted_by == self.request.user

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

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