Menu
CoddyTech

CreateView

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

메뉴에는 연결된 페이지가 없는 Post a job 링크가 있습니다. 행을 추가하는 페이지는 매번 같은 코드로 이루어집니다. 빈 양식을 표시하고, 제출된 내용을 확인하고, 저장한 다음, 리디렉션합니다. CreateView는 이러한 코드이며, ModelForm을 대신 만들어 줍니다.

from django.views.generic import CreateView


class RecipeCreateView(CreateView):
    model = Recipe
    fields = ["title", "cuisine", "minutes"]

fields에는 양식의 필드가 나열되며, ModelForm의 Meta와 같습니다. 템플릿은 기본적으로 recipes/recipe_form.html이며, 양식은 form으로 사용할 수 있습니다. 데이터가 유효하지 않으면 오류와 함께 양식이 다시 표시되고, 아무것도 저장되지 않습니다.

"recipes/new/" 경로를 "recipes/<slug:slug>/" 위에 배치하세요. Django는 일치하는 첫 번째 경로를 사용합니다. new는 유효한 슬러그이므로, 슬러그 경로를 이 경로보다 위에 두면 /recipes/new/와 일치하여 404를 반환합니다.

challenge icon

챌린지

중급

기존 템플릿 jobs/job_form.html을 사용해 Post a job 페이지를 만드세요.

  1. jobs/views.py에 Job을 대상으로 하고 title, company, city, salary, description 필드를 사용하는 CreateView인 JobCreateView를 추가하세요.
  2. jobs/urls.py에 이름이 create인 "jobs/new/" 경로를 추가하세요.

채용 공고를 등록하면 저장된 다음 Django가 No URL to redirect to 오류와 함께 멈춥니다. 다음 강의에서 이 문제를 해결합니다.

직접 해보기

from django.views.generic import DetailView, ListView, TemplateView

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

클래스 기반 뷰의 모든 레슨

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