DevHyun

[DevHyun's Blog] Django Form 만들기(일반 사용자가 Post 수정 가능하게 만들기) 본문

Web/Django&Python Blog Projecct

[DevHyun's Blog] Django Form 만들기(일반 사용자가 Post 수정 가능하게 만들기)

D3V3L0P3R 2020. 10. 21. 19:41

 

Django Form 만들기(일반 사용자가 Post 추가 가능하게 만들기) 에서 이어집니다.

d3v3lop3r.tistory.com/24

 

 

Django Form 만들기(일반 사용자가 Post 추가 가능하게 만들기)

장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다. tutorial.djangogirls.org/ko Django Form은 ModelForm을 생성해 자동으로 모델에 결과물을 저장할 수 있습니다. ∨∨ form 관련 참고

d3v3lop3r.tistory.com

 

장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다.

tutorial.djangogirls.org/ko

 

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>

 

Comments