עמוד המשרות שלך
חלק מהיחידה תצוגות מבוססות מחלקות במסלול ה-Django של Coddy. שיעור 17 מתוך 18.
מפרסמי המודעות רוצים מקום אחד שבו יופיעו המשרות שפרסמו. בתפריט כבר מוצג למשתמשים מחוברים קישור Your jobs אל /my-jobs/, אבל עדיין אין לו מענה.
מכאן ממשיכים לבנות בעזרת מה שנלמד ביחידה הזאת, ללא דוגמה. העמוד הוא רשימה, ולכן הוא ListView. השורות שלו תלויות במי שמבקש אותן, ולכן בוחרים אותן בתוך get_queryset(), שם self.request.user זמין. רק משתמש מחובר יכול לראות את המשרות שלו. תנו לעמוד תבנית משלו: jobs/job_list.html שייכת לרשימה הציבורית.
אתגר
בינוניהוסיפו את /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 אונליין