[Django] Todo 게시판_5 [할 일 수정 기능]

2022. 8. 25. 17:14WEB/Django

todo 사이트 만들기-5

  • template 정의 :
  • 생성 기능에 사용한 html페이지 제목만 수정(차후 html 중복 부분 수정 필요)
<html>
    <head>
        <title>TODO LIST</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/1.0.0/css/bootstrap.min.css"/>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons/css"/>
    </head>

    <body>
        <div class="'container">
            <h1>할 일 수정</h1>
            <div class="container">
                <div class="row">
                    <div class="col-md-12">
                        <div class="card">
                            <div class="card-body">
                                <form method="POST">
                                    {% csrf_token %} {{ form.as_p}}
                                    <button type="submit" class="btn btn-primary">수정</button>
                                </form>
                            </div>

                        </div>
                    </div>
                </div>
            </div>
        </div>

    </body>
</html>

 

  • view 정의 :
  • 생성 기능과 구조적으로 동일하나, 데이터를 가져오기 위해 id 값을 받고 이를 통해 데이터를 찾음
  • form = TodoForm(instance=todo) : 기존 TODO 데이터를 폼 객체로 생성
def todo_edit(request, pk):
    todo = Todo.objects.get(id=pk)
    if request.method =='POST':
        form  = TodoForm(request.POST, instance=todo)
        if form.is_valid():
            todo = form.save(commit=False)
            todo.save()
            return redirect('todo_list')
    else:
        form = TodoForm(instance=todo)
    return render(request, 'todo/todo_edit.html', {'form':form})
  • urls 정의 :
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.todo_list, name='todo_list'),
    path('<int:pk>/',views.todo_detail, name='todo_detail'),
    path('post/',views.todo_post,name='todo_post'),
    path('<int:pk>/edit/',views.todo_edit,name='todo_edit'),
]

- 완성 화면 (메인):

- 수정 페이지 :