제네릭 뷰
와 관련된 이전 포스팅에서 반복했던 내용이기 때문에 간단하게 작성한다.
기존에 작성한
함수형 뷰
는 아래와 같다. 주석처리 한다.
#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)
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
함수를 작성한다.
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"),
]