Menu
CoddyTech

새 구인 게시물 등록하기

Coddy Django 여정의 클래스 기반 뷰 섹션에 포함된 레슨. 18개 중 11번째.

채용 공고를 게시하면 Django가 저장한 뒤 멈춥니다. No URL to redirect to. 저장한 뒤 CreateView는 success_url로 리디렉션합니다. 이 값이 없으면 새 행에 모델 메서드 get_absolute_url()을 통해 주소를 요청합니다.

행 페이지의 주소는 행에 따라 달라지므로 이 메서드는 모델에 속합니다. 경로 이름과 인수를 URL로 바꿔 주는 reverse()로 주소를 만드세요. 템플릿에서 {% url %}을 사용하는 것과 같습니다.

class Recipe(models.Model):
    ...

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

kwargs={...}로 이름을 지정해 인수를 전달하거나 args=[...]로 순서대로 전달하고, django.urls에서 reverse를 가져오세요. 템플릿에서는 {{ recipe.get_absolute_url }}로 링크할 수 있고, UpdateView도 해당 주소로 이동합니다.

challenge icon

챌린지

중급

게시한 후 브라우저에는 새 채용 공고 페이지가 표시되어야 합니다. jobs/models.py에서 Job에 해당 페이지의 URL인 jobs:detail 경로를 반환하는 get_absolute_url()을 추가하세요. 이 경로는 pk가 아니라 채용 공고의 슬러그를 사용합니다. Leafy의 Tea Taster 채용 공고는 /jobs/tea-taster-leafy/를 반환합니다. JobCreateView는 그대로 두세요.

채용 공고를 게시하면 해당 페이지로 이동합니다.

직접 해보기

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):
        # 새 채용 공고의 slug는 제목과 회사 이름을 바탕으로 생성됩니다: "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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

클래스 기반 뷰의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드