Menu
CoddyTech

Yeni İş İlanına Geçiş

Coddy'nin Django Journey'sinin Sınıf Tabanlı Görünümler bölümünün bir parçası. Ders 11 / 18.

Bir iş ilanı yayınlarsın ve Django onu kaydeder, sonra durur: No URL to redirect to. Kaydettikten sonra bir CreateView, success_url adresine yönlendirir. Bu adres yoksa yeni satırın adresini bir model yöntemi aracılığıyla ister: get_absolute_url().

Bir satırın sayfasının adresi satıra bağlı olduğundan, bu yöntem modelde yer almalıdır. Bunu, bir rotanın adını ve bağımsız değişkenlerini URL'ye dönüştüren reverse() ile oluştur; bu, şablonda {% url %} etiketinin yaptığı işin aynısıdır:

class Recipe(models.Model):
    ...

    def get_absolute_url(self):
        return reverse("recipes:recipe", kwargs={"pk": self.pk})

Bağımsız değişkenleri kwargs={...} ile adlandırarak ya da args=[...] ile sırayla ver ve reverse işlevini django.urls içinden içe aktar. Bir şablon {{ recipe.get_absolute_url }} ile bağlantı oluşturabilir; bir UpdateView da bu adrese gider.

challenge icon

Görev

Orta

İlanı gönderdikten sonra tarayıcı yeni iş ilanının sayfasını açmalıdır:

  • jobs/models.py içinde Job için, sayfasının URL'si olan jobs:detail rotasını döndüren bir get_absolute_url() tanımlayın.
  • JobCreateView olduğu gibi bırakın.

Run düğmesine basıp bir iş ilanı gönderin: ilan sayfasına yönlendirilirsiniz.

Kendin dene

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):
        # Yeni bir iş ilanının slug değeri, başlığından ve şirketinden oluşturulur: "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)
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Sınıf Tabanlı Görünümler bölümündeki tüm dersler

Kendi başına pratik yap: Django playground