Pencarian Kerja
Termasuk bagian View Berbasis Class dalam perjalanan Django di Coddy. Pelajaran 18 dari 18.
Fitur terakhir adalah kotak pencarian di halaman lowongan kerja. Pengunjung mengetik developer, menekan Cari, lalu hanya melihat lowongan kerja yang memiliki kata tersebut di judulnya.
Formulir pencarian menggunakan GET, jadi kata tersebut muncul di URL sebagai ?q=developer, yang dapat disimpan dalam tautan atau bookmark. Tampilan membacanya seperti membaca ?city=, di get_queryset(). Orang mengetik dengan huruf besar atau kecil, jadi cocokkan dengan pencarian yang mengabaikan perbedaan huruf besar dan kecil.
Filter diterapkan berurutan: persempit berdasarkan kota jika ada, lalu berdasarkan kata tersebut jika ada. Tautan paginasi sudah menggunakan {% querystring %}, jadi pencarian tetap ada saat berpindah halaman.
Tantangan
SedangTambahkan pencarian ke /jobs/:
- Form GET di bagian atas dengan kotak bernama
qdan tombolSearch. Kotak tersebut menyimpan kata yang dicari. ?q=developermenampilkan lowongan yang judulnya berisideveloper, tanpa membedakan huruf besar atau kecil.?q=engineer&city=Berlinmenampilkan lowongan engineer di Berlin.
Tekan Jalankan dan cari developer.
Coba sendiri
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
class MyJobsView(LoginRequiredMixin, ListView):
template_name = "jobs/my_jobs.html"
context_object_name = "jobs"
def get_queryset(self):
return Job.objects.filter(posted_by=self.request.user).order_by("-posted")
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di View Berbasis Class
2Tampilan Generik untuk Menampilkan Data
ListViewDetailViewLatihan sendiri: Playground Django