Django/INSTA

[Django] 장고 CRUD기능 중 UPDATE - 인스타 클론코딩

씨주 2024. 3. 16. 00:45

📍 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가 그대로 불러온다는 것을 알 수 있다.