티스토리 뷰
글을 수정 및 삭제하는 방법입니다.
해당 글의 작성자와 일치할 때 수정, 삭제할 수 있게 구현하면 더 좋지만, if 문을 이용해 검사하면 되므로 간단한 수정, 삭제만 구현해보도록 하겠습니다.
수정의 경우 글을 생성하는 것과 유사하고, 삭제는 delete 함수를 사용하면 됩니다.
urls.py에서 다음을 추가합니다.
urlpatterns = [
path('',views.home, name="home"),
path('detail/<int:post_id>',views.detail, name="detail"),
path('create/',views.create, name="create"),
path('detail/<int:post_id>/update/',views.update, name="update"),
path('detail/<int:post_id>/delete/',views.delete, name="delete"),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
해당 글에 대한 update(수정), delete(삭제) url을 만들어줍니다.
이제 views.py를 추가합시다.
def update(request, post_id):
post = Post.objects.get(id=post_id)
if request.method == "POST":
post.title = request.POST['title']
post.body = request.POST['body']
post.date = timezone.now()
try:
post.image = request.FILES['image']
except:
post.image = None
post.save()
return redirect('/detail/'+str(post.id),{'post':post})
else:
post=Post()
return render(request, 'update.html', {'post':post})
def delete(request, post_id):
post = Post.objects.get(id=post_id)
post.delete()
return redirect('home')
update(수정) 함수는 수정하고자 하는 글을 Post.objects.get(id=post_id)로 불러와 글을 작성할 때와 똑같이 만들어 주면 됩니다. 여기서 기존 글을 불러오기 위해서는 instance를 이용해 불러오면 됩니다.
delete(삭제) 함수는 마찬가지로 해당 글을 불러와 delete 함수로 지워버리면 됩니다. 해당 글을 지우기 전에 삭제 확인 여부 메시지를 출력할 수도 있습니다.
위 내용들은 추후 개인 프로젝트가 완성되면 추가로 설명하도록 하겠습니다.
update.html의 경우 그냥 create.html과 동일하게 만들면 되고, delete.html의 경우 따로 만들지 않아도 됩니다. 삭제를 하는데 굳이 html을 만들 필요는 없습니다.ㅣ
그리고 detail.html에 a 태그를 이용해 다음과 같이 추가하면 끝입니다.
<a href="{% url 'update' post.id %}">수정</a>
<a href="{% url 'delete' post.id %}">삭제</a>
이로써 수정, 삭제를 진행할 수 있습니다.
'django' 카테고리의 다른 글
django / 소셜 로그인 구현 (0) | 2020.12.29 |
---|---|
django / 댓글 기능 구현 (0) | 2020.12.25 |
django / 사진 업로드 (media) (0) | 2020.12.25 |
django / 새 글 작성 (0) | 2020.12.25 |
django / url 관리 (0) | 2020.12.04 |
댓글