İş İlanları Sayfanız
Coddy'nin Django Journey'sinin Sınıf Tabanlı Görünümler bölümünün bir parçası. Ders 17 / 18.
İlan verenler, yayınladıkları iş ilanlarını tek bir yerde görmek istiyor. Menüde oturum açmış kullanıcılara /my-jobs/ bağlantısına giden Your jobs bağlantısı zaten gösteriliyor, ancak henüz orada bir sayfa yok.
Buradan itibaren, bir örnek olmadan bu bölümde öğrendiklerini kullanarak sayfayı oluşturacaksın. Sayfa bir liste olduğundan, bir ListView'dır. Satırları, kimin istediğine bağlıdır; bu nedenle self.request.user değerinin kullanılabildiği get_queryset() içinde seçilir. Görüntülenecek işleri yalnızca oturum açmış bir kullanıcıya ait olabilir. Sayfaya kendine ait bir şablon ver: jobs/job_list.html, herkese açık listeye aittir.
Görev
Ortaİlanı yayınlayan her kullanıcıya kendi ilanlarının bulunduğu bir sayfa verin.
jobs/views.pydosyasına yalnızca oturum açmış kullanıcılar içinMyJobsViewekleyin. Kullanıcının ilanlarını en yeniden eskiye doğru tek bir sayfada listeler.jobs/base.htmldosyasını temel alarakjobs/my_jobs.htmloluşturun: bir<h1>içindeYour jobs, ardından her ilan için başlığın<strong>içinde olduğu bir<li class="job">. Hiç ilan yoksaYou have not posted a job yet.gösterin.jobs/urls.pydosyasına adımineolanmy-jobs/yolunu ekleyin.
ada (coddy-pass-123) olarak oturum açıp Your jobs düğmesine basın: onun 6 ilanını görürsünüz.
Kendin dene
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
Sınıf Tabanlı Görünümler bölümündeki tüm dersler
Kendi başına pratik yap: Django playground