📍 CRUD - UPDATE
오늘은 update 기능을 추가해보자.
📌 # _card.html
<div class="card-header" style="display: flex; align-items: center;">
<span style="flex-grow: 1;">작성자</span>
<a class='btn btn-secondary' style="float:right" href="{% url 'posts:delete' id=post.id %}">DELETE</a>
<a class='btn btn-secondary' style="float:right" href="{% url 'posts:update' id=post.id %}">UPDATE</a>
</div>
delete와 같이 <a>링크를 이용해 update버튼을 추가해주고 update url을 연결해주었다.
📌 # views.py
def update(request, id):
post = Post.objects.get(id=id)
if request.method == 'POST':
form = PostForm(request.POST, instance=post)
if form.is_valid():
form.save()
return redirect('posts:index')
else:
form = PostForm(instance=post)
context = {
'form' : form,
}
return render(request, 'form.html', context)
create와 로직은 비슷하다.
1. POST형식(내용이 채워졌을 때)의 request라면 is_valid 검토 후 request한 내용을 저장 후 index로 redirect
2. POST형식이 아니라면 post id를 찾아 해당 내용(instance)이 기입된 form.html로 render
create에서 썻던 form과 동일하기 때문에 따로 edit.html을 만들 필요 없이 form.html로 통일 시킬 수 있다.
(이해할 땐 헷갈렸는데 이해하고 나니 코드도 간단해지고 html도 통합할 수 있어서 편하다.)
📌 # urls.py
path('<int:id>/update', views.update, name='update')
update버튼을 누르면 아래와 같이 content, image가 그대로 불러온다는 것을 알 수 있다.
'Django > INSTA' 카테고리의 다른 글
[Django] 장고 Signup(회원가입) - 인스타 클론코딩 (0) | 2024.03.19 |
---|---|
[Django] 장고 User모델링 - 인스타 클론코딩 (0) | 2024.03.17 |
[Django] 장고 CRUD기능 중 DELETE - 인스타 클론코딩 (0) | 2024.03.15 |
[Django] 장고 CRUD기능 중 CREATE - 인스타 클론코딩 (0) | 2024.01.21 |
[Django] 장고 부트스트랩 Grid - 인스타 클론코딩 (0) | 2024.01.19 |