이번 시간에는 등록한 글을 수정 ( Update ) 하도록 해 보겠다
일단 상세페이지로 들어가서 끄적여보자
이전 시간까지 만든 모습을 보여주겠다
여기서 수정버튼이 없구나
추가 해준다
수정버튼을 생성했다
여기서 더 추가할 것이 있을텐데 일단 과정을 보기위해 하나씩 하겠다
수정을 눌렀을때 따로 페이지를 타지 않고, 같은 페이지에서 바로 할 수 있도록 한다
수정을 눌렀을때 readOnly를 풀어주는 Java Script코드를 작성하겠다
버튼 class명 btnUpdate인 아이를 추가 ( add ) 한다 이벤트 ( EventListener ) 를 무슨이벤트? 클릭 ( 'click' ) 이벤트를,
그리고 클릭했을 때의 함수 ( e => {} ) 를 넣는다
document.querySelector('.btnUpdate').addEventListener('click', e => {
});
코드를 말로 풀어보았는데 이해했으려나 모르겟당..
class명 title 과 content를 찾아서 변수에 저장한 뒤
.readOnly 를 false로 한다면, readOnly가 풀릴 것이라는 것을 적어놓았다
let title = document.querySelector('.title');
let content = document.querySelector('.content');
title.readOnly = false;
content.readOnly = false;
결론은 클릭했을때 title과 content의 readOnly를 푼다 이말이다
그리고 수정을 클릭 해보고, 적어보자
그다음, 수정을 눌렀을때 form으로 전송해서 Update를 해야한다
근데 우리는 form이 없다. 그래서 form을 만들어 보도록 하자
아, 그리고 form을 하기위해선 버튼이아니라 submit이 필요하기 때문에 submit 버튼을 추가한다
submit버튼은 처음엔 안보였다가 class명 btnUpdate를 눌렀을때 사라지게하고 submit을 보이게하는 java Script코드를 추가할 것이다
일단 class명 btnSubmit과 btnUpdate를 찾아서 display를 바꿔준다
btnSubmit은 inline-block 형식으로 보이게 하고
btnUpdate는 none으로 안보이게 한다
let btnSubmit = document.querySelector('.btnSubmit');
let btnUpdate = document.querySelector('.btnUpdate');
btnSubmit.style.display = 'inline-block';
btnUpdate.style.display = 'none';
그리고 실행 시켜보자 !
그 이유는 여기에 있다
url update라고 선언해놨는데 우리는 path를 만들지 않았다
배달을 시켰는데, 없는 주소를 말한것과 다름없다
<form action="{% url 'update' boardid=board.id %}" method="POST">
이렇게 주소등록을 해주자
그리고 실제 사용할 update함수도 만들어야 한다
안그럼 Django 경찰서에서 왜 주소등록하고 집은 안지었냐고 뭐라 할 것이다. 그꼴을 보기싫으면 일단 만들자
자 이제 브라우저에서 수정버튼을 눌러보자!
결과는 바뀌었다
웹개발자의 필살기 F12를 눌러 개발자 도구를 보면 바뀐거도 확인할 수 있다
자 이제, 【진짜 수정】을 눌렀을때 수정하게끔 적용 시켜보자
일단 수정대상 부터 찾아야 한다
파라메터로 boardid가 넘어왔고, 수정대상은 기본키 boardid인 board객체가 되겠다
일단 boardid로 객체를 찾아 변수에 넣어준다
board = Board.objects.get(pk=boardid)
그리고 우리가 적은 제목과 내용을 파라메터로 받았을 터이니 그것을 변수에 넣어준다
title = request.POST.get('title')
content = request.POST.get('content')
나는 제목과 내용이 아무것도 안적었을시를 방지하기 위해 if문을 넣어 주었다
if title is not None and board is not None:
아까 boardid로 찾은 board의 title과 content값에 파라메터로 받은 title과 content값으로 덮어준다 포근하게
board.title = title
board.content = content
덮어씌운 board를 저장한다 ( commit이라고 보면 되겠다 )
그리고 성공할시 수정한 글을 확인겸, 다시 redirect를 해준다 특이점은 인수가 두개 있는데
오른쪽은 url의 파라메터라 보면 되겠다
board.save()
return redirect('detail', boardid=boardid)
그리고 실전에 들어가보자
【진짜 수정】을 눌렀을때, 아래의 결과가 나왔다
우리는 업데이트에 성공하였다
다음 시간은 삭제기능을 해보겠다
삭제는 쉬우니 금방 끝내서 기분이 좋을 거 같다
'Web Programming > Django' 카테고리의 다른 글
12강) Django 게시판 마무리 (0) | 2021.01.19 |
---|---|
11강) Django 게시판 삭제기능 만들기! ( Delete ) (0) | 2021.01.18 |
9강) Django 게시판 상세조회하기 ( Read ) (0) | 2021.01.16 |
8강) Django 게시판 조회하기 ( Read ) (0) | 2021.01.16 |
7강) Django 게시판 등록하기 ( Create ) (0) | 2021.01.15 |