見た目を整えるCreateView
templatesフォルダにcreate.htmlを作成し、urls.pyとつなぎこむ
1 2 3 4 5 6 7 8 9 |
from django.urls import path from .views import TodoList, TodoDetail, TodoCreate urlpatterns = [ path('list/', TodoList.as_view()), path('detail/<int:pk>', TodoDetail.as_view()), path('create/', TodoCreate.as_view()), ] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from django.shortcuts import render from django.views.generic import ListView, DetailView, CreateView from .models import TodoModel # Create your views here. class TodoList(ListView): template_name = 'list.html' model = TodoModel class TodoDetail(DetailView): template_name = 'detail.html' model = TodoModel class TodoCreate(CreateView): template_name = 'create.html' model = TodoModel |
1 2 3 4 5 6 7 8 9 |
{% extends 'base.html' %} {% block content %} <form action="" method="POST"> {{form.as_p}} <input type="submit" value="作成する"> </form> {% endblock content %} |
{{form.as_p}}はdjangoタグで、pタグで囲ったものを出すという意味
ここでいったん表示を確認
1 |
python3 manage.py runserver |

TodoCreateを使うにはfieldsが必要ですよ。と怒られる。
だからmodels.pyのどこを使うか指定する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from django.shortcuts import render from django.views.generic import ListView, DetailView, CreateView from .models import TodoModel # Create your views here. class TodoList(ListView): template_name = 'list.html' model = TodoModel class TodoDetail(DetailView): template_name = 'detail.html' model = TodoModel class TodoCreate(CreateView): template_name = 'create.html' model = TodoModel fields = ('title', 'memo', 'priority', 'duedate') |
1 2 3 4 5 6 7 8 9 |
{% extends 'base.html' %} {% block content %} <form action="" method="POST">{% csrf_token %} {{form.as_p}} <input type="submit" value="作成する"> </form> {% endblock content %} |
ここでもう一度起動する
1 |
python3 manage.py runserver |
で、これを入力しようとすると

またエラーが出ます

入力した後の画面が指定されていないためのエラー
get_absolute_url メソッドを使うかurlを指定するように指示されているので
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
from django.shortcuts import render from django.views.generic import ListView, DetailView, CreateView from .models import TodoModel from django.urls import reverse_lazy # Create your views here. class TodoList(ListView): template_name = 'list.html' model = TodoModel class TodoDetail(DetailView): template_name = 'detail.html' model = TodoModel class TodoCreate(CreateView): template_name = 'create.html' model = TodoModel fields = ('title', 'memo', 'priority', 'duedate') success_url = reverse_lazy('') |
succsess_url は入力が成功したもの
reverse_layzy はdjangoの遷移を戻すというメソッド
urls.py
djangoの特徴として、urlごとに表示(views,py)を見に行くが、リストに名前をつけることが可能
1 2 3 4 5 6 7 8 9 |
from django.urls import path from .views import TodoList, TodoDetail, TodoCreate urlpatterns = [ path('list/', TodoList.as_view(), name='list'), path('detail/<int:pk>', TodoDetail.as_view(), name='detail'), path('create/', TodoCreate.as_view(), name='create'), ] |
こんな感じで
で、views.pyに名前として渡す
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
sfrom django.shortcuts import render from django.views.generic import ListView, DetailView, CreateView from .models import TodoModel from django.urls import reverse_lazy # Create your views here. class TodoList(ListView): template_name = 'list.html' model = TodoModel class TodoDetail(DetailView): template_name = 'detail.html' model = TodoModel class TodoCreate(CreateView): template_name = 'create.html' model = TodoModel fields = ('title', 'memo', 'priority', 'duedate') success_url = reverse_lazy('list') |
サーバーを動かして確認する

作成するを押して見ると

無事に/listに戻ることが出来ました。
データを削除するときのテンプレートDeleteView
templatesフォルダにdelete.htmlを作成し、urls.pyとつなぎこむ
1 2 3 4 5 6 7 8 9 |
from django.urls import path from .views import TodoList, TodoDetail, TodoCreate, TodoDelete urlpatterns = [ path('list/', TodoList.as_view(), name='list'), path('detail/<int:pk>', TodoDetail.as_view(), name='detail'), path('create/', TodoCreate.as_view(), name='create'), path('delete/<int:pk>', TodoDelete.as_view(), name='delete'), ] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
from django.shortcuts import render from django.views.generic import ListView, DetailView, CreateView, DeleteView from .models import TodoModel from django.urls import reverse_lazy # Create your views here. class TodoList(ListView): template_name = 'list.html' model = TodoModel class TodoDetail(DetailView): template_name = 'detail.html' model = TodoModel class TodoCreate(CreateView): template_name = 'create.html' model = TodoModel fields = ('title', 'memo', 'priority', 'duedate') success_url = reverse_lazy('list') class TodoDelete(DeleteView): template_name = 'delete.html' model = TodoModel success_url = reverse_lazy('list') |
1 2 3 4 5 6 7 |
{% extends 'base.html' %} {% block content %} <form action='' method="POST">{% csrf_token %} <input type="submit" value='削除します'> </form> {% endblock content %} |
データを更新するときのテンプレートDeleteView
templatesフォルダにupdate.htmlを作成し、urls.pyとつなぎこむ
1 2 3 4 5 6 7 8 9 10 11 |
from django.urls import path from .views import TodoList, TodoDetail, TodoCreate, TodoDelete, TodoUpdate urlpatterns = [ path('list/', TodoList.as_view(), name='list'), path('detail/<int:pk>', TodoDetail.as_view(), name='detail'), path('create/', TodoCreate.as_view(), name='create'), path('delete/<int:pk>', TodoDelete.as_view(), name='delete'), path('update/<int:pk>', TodoUpdate.as_view(), name='update'), ] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
from django.shortcuts import render from django.views.generic import ListView, DetailView, CreateView, DeleteView, UpdateView from .models import TodoModel from django.urls import reverse_lazy # Create your views here. class TodoList(ListView): template_name = 'list.html' model = TodoModel class TodoDetail(DetailView): template_name = 'detail.html' model = TodoModel class TodoCreate(CreateView): template_name = 'create.html' model = TodoModel fields = ('title', 'memo', 'priority', 'duedate') success_url = reverse_lazy('list') class TodoDelete(DeleteView): template_name = 'delete.html' model = TodoModel success_url = reverse_lazy('list') class TodoUpdate(UpdateView): template_name = 'update.html' model = TodoModel fields = ('title', 'memo', 'priority', 'duedate') success_url = reverse_lazy('list') |
1 2 3 4 5 6 7 8 9 10 11 |
% extends 'base.html'%} {% block content %} <form action='' method='POST'>{% csrf_token %} {{ form.title }} {{ form.memo }} {{ form.priority }} {{ form.duedate }} <input type="submit" value='更新する'> </form> {% endblock content %} |
![]() |
![]() |
---|
コメントを残す