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를 반환합니다.
챌린지
중급템플릿 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 플레이그라운드