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>/"보다 위에 배치하세요. new는 유효한 슬러그이므로, 이 라우트 아래에 두면 상세 뷰가 /recipes/new/를 처리하고 404를 반환합니다.

challenge icon

챌린지

중급

템플릿 jobs/job_form.html이 준비되었습니다. Post a job 페이지를 구현하세요.

  • title, company, city, salary, description 필드를 사용하는 Job의 CreateView인 JobCreateView.
  • "jobs/new/" 경로의 이름은 create입니다.

Run을 눌러 채용 공고를 등록하세요. 저장된 다음 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 플레이그라운드