Halaman Lowongan Kerjamu
Termasuk bagian View Berbasis Class dalam perjalanan Django di Coddy. Pelajaran 17 dari 18.
Poster menginginkan satu tempat untuk melihat pekerjaan yang mereka posting. Menu sudah menampilkan tautan Your jobs ke /my-jobs/ bagi pengguna yang sudah login, tetapi belum ada yang menanganinya.
Mulai dari sini, kamu membangun dengan materi yang diajarkan di bagian ini, tanpa contoh. Halaman ini berupa list, jadi gunakan ListView. Baris-barisnya bergantung pada siapa yang meminta, jadi baris tersebut dipilih di get_queryset(), tempat self.request.user tersedia. Hanya pengguna yang sudah login yang memiliki pekerjaan untuk dilihat. Berikan template tersendiri: jobs/job_list.html digunakan untuk list publik.
Tantangan
SedangTambahkan /my-jobs/, rute bernama mine:
- Pengunjung yang belum login akan diarahkan untuk login.
- Pengguna melihat judul
Your jobsdan semua lowongan mereka di satu halaman, dimulai dari yang terbaru, masing-masing di dalam<li class="job">dengan judul di dalam<strong>. - Jika belum ada:
You have not posted a job yet.
Tekan Jalankan, login sebagai ada, lalu tekan Your jobs.
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
Semua pelajaran di View Berbasis Class
2Tampilan Generik untuk Menampilkan Data
ListViewDetailViewLatihan sendiri: Playground Django