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')

 

About TIER

TIERは、Global、DX、HRの3軸により 大手企業から中小企業、民間企業から行政まで、海外展開に必要なサービスをワンストップで支援しております。海外マーケティングセールスからデジタルマーケティング、多言語サイトや越境ECサイト制作等の海外向けクリエイティブ制作、グローバル人材採用支援まで幅広く対応しております。お気軽にお問い合わせください。

Check Also

Python 条件分岐 – if文の使い方とサンプルコード

プログラミングには制御構文の代 …