Menu
CoddyTech

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을 사용할 때까지 기다립니다.

challenge icon

챌린지

쉬움

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"]
quiz icon실력 점검

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

클래스 기반 뷰의 모든 레슨

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