Home / Django / Djangoメモ:CRUD操作-Create: CreateView編

Djangoメモ:CRUD操作-Create: CreateView編

1.  まずはtemplatesフォルダの中にcreate.htmlを作成します。ここではフォームボタンを入れています。{% csrf_token %}は入れないとセキュリティ上でエラーになってしまうため入れるようにしましょう。尚、.as_pとは、Djangoのタグで、pタグで囲むことを指します。

{% extends 'base.html' %}

{% block  content %}

<form action ="" method="POST">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="作成する">
</form>

{% endblock content %}

2. 次にアプリのurls.pyに今回のpathを追記しましょう。また今回新たに各pathに名前を付与しています。

from django.urls import path
from .views import Todolist, TodoDetail, TodoCreate #TodCreateを追記

urlpatterns = [
    path('list/', Todolist.as_view(), name = 'list'), 
    path('detail/<int:pk>', TodoDetail.as_view(), name = 'detail'),
    path('create/', TodoCreate.as_view(), name = 'create') #追記
]

3.  次に、views.pyにCreateのクラスを追記しましょう。template_name及びmodelに関しては、これまで通りですが、今回はcreate.html上で新たにフォームを設定しているため、fieldsとsuccess_urlを指定する必要があります。fieldsは、models.pyの対象モデルの中で、関連する変数をきちんと網羅させる必要があります。また、フォーム完了後の遷移先のURLを指定するためのsuccess_urlを入れます。ここでは今回urls.pyのpathで設定したurlの名前を入れます。また、reverse_lazy(URLに逆引きする)ですが、クラスではreverseではなく、reverse_lazyを使います。reverseは関数の際に使用します。

from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView #CreateViewを追記
from .models import TodoModel
from django.urls import reverse_lazy

class Todolist(ListView):
    tamplete_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', 'note', 'priority', 'duedate')
    success_url = reverse_lazy('list')

 

Check Also

Djangoメモ:Bootstrapの設定

CSSをゼロから作らなくても手 …