[DevHyun's Blog] Django Form 만들기(일반 사용자가 Post 수정 가능하게 만들기)
Django Form 만들기(일반 사용자가 Post 추가 가능하게 만들기) 에서 이어집니다.
Django Form 만들기(일반 사용자가 Post 추가 가능하게 만들기)
장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다. tutorial.djangogirls.org/ko Django Form은 ModelForm을 생성해 자동으로 모델에 결과물을 저장할 수 있습니다. ∨∨ form 관련 참고
d3v3lop3r.tistory.com
장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다.
Django Form 이해를 바탕으로 Post 추가 기능을 개발하였으니 수정도 가능하게 개발해보자!!!
1. Blog/templates/Blog/post_detail.html 에서 수정버튼 추가
* Blog/templates/Blog/post_detail.html
{% extends 'Blog/base.html' %}
{% block content %}
<div class="post">
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% endif %}
<a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"></span></a>
<h1>{{ post.title }}</h1>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endblock %}
2. Blog/urls.py 에 post_edit.html 경로추가
* Blog/urls.py
...
..
.
urlpatterns = [
...
..
.
path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
]
3. Blog/views.py 에서 View 만들기!
* Blog/views.py
...
..
.
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'Blog/post_edit.html', {'form': form})
* post_new View와 post_edit View가 다른점!(따로 설명이 없어 주관적인 견해가 섞임! 지적 환영!!)
- 선언 시 pk를 추가한다 : 특정 게시물만 수정해야 하기 때문에 url로부터 pk를 받아서 처리.
- get_object_or_404(Post, pk=pk)를 호출 : 수정하고자 하는 글을 Post 모델 인스턴스(instance)로 가져와서 처리 (pk로 원하는 글을 찾을 수 있음)
4. Run -> 포스트 저장, 수정 해보기!
++ Django Girls 튜토리얼엔 없는 내용!
5. 타이틀 누르면 Home 화면(Post list)으로 이동하기!
* Blog/templates/Blog/base.html
* 제목 div에 post_list url 추가! 참쉽죠?
<html>
...
..
.
<body>
<div class ="page-header">
...
..
.
<h1><a href="{% url 'post_list' %}">DevHyun's Blog</a></h1>
</div>
...
..
.
</body>
</html>