본문 바로가기
Web Programming/django

[Django] CRUD Operation(4)

by 테리는당근을좋아해 2020. 6. 20.

목표

- CRUD Operation에서 Update

- 데이터베이스에 저장된 데이터 수정하기

 

데이터베이스에 저장된 데이터를 수정하는 방법을 구현해보자

 

 

edit.html 생성

1) app 디렉토리 내의 templates 디렉토리 내에 글을 수정하기 위한 html 파일을 생성

<form action="{% url 'update' post.id %}">
    <input type="text" name="title" value="{{post.title}}">
    <input type="text" name="content" value="{{post.content}}">
    <input type="submit" value="작성하기">
</form>

edit.html

input 태그 내의 value 속성을 이용해 이전에 원래 해당 post에 저장되었던 값들을 불러온다.

 

2) edit 메소드 정의

def edit(request, post_id):
    # 매개변수로 전달받은 id에 해당하는 post 객체를 불러온다.
    post = get_object_or_404(Post, pk=post_id)
    # 딕셔너리 형태로 template에 전달한다. 전달한 쿼리셋은 수정화면에서 이전에 저장되어있던 데이터를 그대로 담기위해 사용된다.
    return render(request, 'edit.html', {'post' : post})

 

3) url

path('edit/<int:post_id>/', blog.views.edit, name='edit'),

urls.py

 

 

update 메소드 정의

글을 수정하기 위한 화면과 해당 페이지로 이동하기 위한 edit 메소드에 대한 정의를 해주었다.

이제 update 메소드를 정의해 edit.html에 작성된 수정된 데이터를 데이터베이스에 전달할 메소드를 정의해주어야한다.

 

1) views.py

def update(request, post_id):
    # 매개변수로 전달받은 id에 해당하는 post 객체를 불러온다.
    post = get_object_or_404(Post, pk=post_id)
    # post객체의 title에 GET 방식으로 요청된 name속성값이 'title'인 input 태그 내의 값을 저장한다.
    post.title = request.GET['title']
    # post객체의 content에 GET 방식으로 요청된 name속성값이 'content'인 input 태그 내의 값을 저장한다.
    post.content = request.GET['content']
    # 데이터베이스에 저장한다.
    post.save()

    # 지정한 주소로 리다이렉트한다.
    return redirect('/detail/' + str(post.id))

이전 포스트에서 CRUD의 Create를 구현하기 위한 create 메소드와 비슷하다.

한가지 차이점이라면 Create는 빈 Post 객체를 생성했지만, Update에서는 전달된 post_id에 해당된 Post객체를 불러왔다.

 

2) url.py

path('update/<int:post_id>/', blog.views.update, name='update'),

 

 

 

수정이 잘되는 것을 확인할 수 있다.

 

 

'Web Programming > django' 카테고리의 다른 글

[Django] 회원가입 기능 만들기  (5) 2020.06.20
[Django] CRUD Operation(5)  (2) 2020.06.20
[Django] CRUD Operation(3)  (0) 2020.06.20
[Django] CRUD Operation(2)  (0) 2020.06.20
[Django] CRUD Operation(1)  (0) 2020.06.19

댓글