DeleteView
Coddy Django 여정의 클래스 기반 뷰 섹션에 포함된 레슨. 18개 중 13번째.
작업 페이지에는 Delete 링크가 있습니다. 단순히 방문했을 때 삭제가 일어나서는 안 됩니다. 브라우저와 링크 미리보기 기능은 페이지를 자체적으로 열기 때문입니다. 따라서 DeleteView는 두 단계로 작동합니다. GET 요청에는 확인 질문을 표시하고, 양식에서 보낸 POST 요청에 대해서만 삭제합니다. 레시피 사이트의 예입니다.
from django.urls import reverse_lazy
class RecipeDeleteView(DeleteView):
model = Recipe
success_url = reverse_lazy("recipes:home")템플릿 기본값은 recipes/recipe_confirm_delete.html이며, 여기에는 method="post"와 {% csrf_token %}이 포함된 양식이 있습니다. 삭제 후에는 이동할 행 페이지가 없으므로 success_url이 필요합니다.
여기서는 reverse()가 아니라 reverse_lazy()를 사용하세요. 클래스 속성은 views.py를 가져올 때, 경로가 아직 만들어지기 전에 계산되므로 reverse()를 사용하면 프로젝트가 시작되지 않습니다. reverse_lazy()는 URL을 사용할 때까지 기다립니다.
챌린지
쉬움jobs/job_confirm_delete.html 템플릿이 준비되었습니다. Delete 뒤에 연결되는 페이지를 만드세요.
- 삭제 후 브라우저를
jobs:list로 보내는Job의DeleteView인JobDeleteView. delete라는 이름의 경로"jobs/<slug:slug>/delete/".
Run을 누르고, 채용 공고를 연 다음 Delete를 누르고 확인하세요.
직접 해보기
from django.views.generic import CreateView, DetailView, ListView, TemplateView, UpdateView
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
class JobCreateView(CreateView):
model = Job
fields = ["title", "company", "city", "salary", "description"]
class JobUpdateView(UpdateView):
model = Job
fields = ["title", "company", "city", "salary", "description"]
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
클래스 기반 뷰의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드