Menuju Pekerjaan Baru
Termasuk bagian View Berbasis Class dalam perjalanan Django di Coddy. Pelajaran 11 dari 18.
Posting lowongan kerja dan Django menyimpannya, lalu berhenti: No URL to redirect to. Setelah menyimpan, CreateView mengalihkan ke success_url-nya. Jika tidak ada, Django meminta alamat baris baru melalui method model, get_absolute_url().
Alamat halaman sebuah baris bergantung pada baris tersebut, jadi method ini sebaiknya berada pada model. Buat alamatnya dengan reverse(), yang mengubah nama rute dan argumen menjadi URL, seperti yang dilakukan {% url %} di template:
class Recipe(models.Model):
...
def get_absolute_url(self):
return reverse("recipes:recipe", kwargs={"pk": self.pk})Berikan argumen berdasarkan namanya dengan kwargs={...}, atau secara berurutan dengan args=[...], dan impor reverse dari django.urls. Template dapat membuat tautan dengan {{ recipe.get_absolute_url }}, dan UpdateView juga akan mengarah ke sana.
Tantangan
SedangSetelah mengirim lowongan, browser seharusnya membuka halaman lowongan baru:
- Di
jobs/models.py, tambahkanget_absolute_url()keJobagar mengembalikan URL halamannya, yaitu rutejobs:detail. - Biarkan
JobCreateViewseperti semula.
Tekan Jalankan dan kirim lowongan: kamu akan membuka halamannya.
Coba sendiri
from datetime import date
from django.conf import settings
from django.db import models
from django.utils.text import slugify
class Job(models.Model):
title = models.CharField(max_length=200)
company = models.CharField(max_length=200)
city = models.CharField(max_length=100)
salary = models.PositiveIntegerField(help_text="Yearly, in euros.")
description = models.TextField(blank=True)
posted = models.DateField(default=date.today)
slug = models.SlugField(max_length=220, unique=True, blank=True)
posted_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="jobs",
)
def __str__(self):
return f"{self.title} at {self.company}"
def save(self, *args, **kwargs):
# Lowongan kerja baru mendapatkan slug dari judul dan nama perusahaannya: "python-developer-acme".
if not self.slug:
base = slugify(f"{self.title} {self.company}") or "job"
slug = base
n = 2
while Job.objects.filter(slug=slug).exists():
slug = f"{base}-{n}"
n += 1
self.slug = slug
super().save(*args, **kwargs)
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di View Berbasis Class
4Mengedit View
CreateViewMenuju Pekerjaan Baru2Tampilan Generik untuk Menampilkan Data
ListViewDetailViewLatihan sendiri: Playground Django