제네릭 뷰 UpdateView

Ethan·2024년 1월 19일
0

Dear

목록 보기
11/13

제네릭 뷰와 관련된 이전 포스팅에서 반복했던 내용이기 때문에 간단하게 작성한다.


1. UpdateView를 상속받는 클래스형 뷰 생성


1.1 기존 함수형 뷰 post_update

기존에 작성한 함수형 뷰는 아래와 같다. 주석처리 한다.

#views.py

# def post_update(request, post_id):
#     post = get_object_or_404(Post, id=post_id)
#     if request.method == "POST":
#         post_form = PostForm(request.POST, instance=post)
#         if post_form.is_valid():
#             post_form.save()
#             return redirect("post-detail", post_id=post.id)
#     else:
#         post_form = PostForm(instance=post)
#     context = {"post_form": post_form}
#     return render(request, "posts/post_form.html", context)

1.2 변경된 클래스형 뷰 PostUpdateView

UpdateView 를 상속받는 클래스형 뷰 PostUpdateView를 작성한다.

#views.py > PostUpdateView

class PostUpdateView(UpdateView):
    model = Post
    form_class = PostForm
    template_name = "posts/post_form.html"
    pk_url_kwarg = "post_id"
    
    def get_success_url(self):
        return reverse("post-detail", kwargs={"post_id": self.object.id})

포스트 수정 페이지는 수정 후 해당 포스트의 상세 페이지로 이동하기 때문에 get_success_url 함수를 작성한다.


1.3 url 패턴 변경

url 패턴에서 post_update를 PostUpdateView로 변경해야 한다.

#urls.py

urlpatterns = [
    # path('', views.index),
    path('', views.PostListView.as_view(), name="post-list"),
    path('posts/new/', views.PostCreateView.as_view(), name="post-create"),
    path('posts/<int:post_id>/', views.PostDetailView.as_view(), name="post-detail"),
    path('posts/<int:post_id>/edit/', views.PostUpdateView.as_view(), name="post-update"),
    path('posts/<int:post_id>/delete/', views.post_delete, name="post-delete"),
]
profile
글로 쓰면 머리 속에 정리가 되...나?

0개의 댓글

관련 채용 정보