UpdateViewの作成
最後にUpdateViewの作成をしていきましょう。
UpdateViewも基本的には今までつくったCreateViewやDeleteViewと同じようなイメージです。
つまり、対象となるTodoを呼び出し、内容を変更し、変更ボタンを押すと内容が変更されるという形です。Djangoでは簡単にUpdateViewの実装をすることができます。
実際にコードを書いていきましょう。
[コード]-BASE/templates/update.html
{% extends 'base.html' %}
{% block header %}
<h1>新規Todoの作成</h1>
{% endblock %}
{% block content %}
<form action='' method='post'>{% csrf_token %}
{{ form.as_p }}
<input type='submit' value='Todoを作成する"></form>
{% endblock %}
これはcreate.htmlとほとんど同じです。
次に、views.pyの作成をしていきましょう。
[コード]-BASE/todo/views.py
...
class TodoUpdateView(UpdateView):
model = ToDoModel
template_name = 'update.html'
fields = ['title', 'content', 'pic']
success_url = reverse_lazy('list')
これもCreateViewとほとんど同じです。
これで新しい3つのClassBasedViewを作ることができました。
urls.pyファイルを編集して、urlとviewの繋ぎこみをしていきましょう。
[コード]BASE/todo/urls.py
from django.urls import path
from .views import ToDoListView, ToDoDetailView, ToDoCreateView, ToDoUpdateView
urlpatterns = [
path('list/', ToDoListView.as_view(), name='list'),
path('detail/<int:pk>', ToDoDetailView.as_view(), name='detail'),
path('delete/<int:pk>', ToDoDeleteView.as_view(), name='delete'),
path('create/', ToDoCreateView.as_view(), name='create'),
path('update/<int:pk>', ToDoUpdateView.as_view(), name='update'),
]
これでそれぞれの画面の設定が完了しました。
ただ、今はhtmlファイル上ではそれぞれのViewをつなぐリンクの設定がされていません。
例えば、Todoリストでの一覧において、個別のデータをクリックすると、そのTodoの詳細が表示されるような設定です。
djangoでは、リンクの設定も簡単にできるようになっています。
次の記事で
リンクの使い方を学び、それぞれのViewの関連付けを行っていきましょう。