Django:CRUDを実装する【create】DBへのレコード新規登録
目次
Django:CRUDを実装する【create】DBへのレコード新規登録
updateよりも難易度は低いです。
save関数の標準動作がInsertであるため、特に工夫を凝らさなくても新規追加してくれます。
プリセットクラスを利用したレコードの新規追加方法
【CreateView】という汎用ビューが存在しています。
このクラスを利用すると新規追加のViewはたった3行の中身で終わります。
1 2 3 4 |
class HogeCreateView(generic.edit.CreateView): model = Hoge form_class = HogeCreateForm success_url = reverse_lazy("Hoge:hoge_list") |
Class宣言後の3行はこんな内容です。いやぁ、マジで簡単。
- 2行目:操作するモデルを指示
- 3行目:Updateとかと共通で使うFormを指示
- 4行目:成功した時のJUMP先を指示
PresetClass(汎用ビュー)を利用する場合の問題点
課題となるパーツはUpdateの時と同じです。同じく知見のある方なら難なくクリアできると思います。
- update成功時のリダイレクト先(success_url)にページネーションのあるListを設定する
- Template.html で呼び出す {{ form }} でレスポンシブデザインを作る
- update時のバリデーションエラーが発生する
これらの乗り越え方については前回記事をご参照ください。
関数(def)を使ってCreateを書く
■app/urls.py
1 2 3 4 5 6 7 8 |
from django.urls import path from . import views app_name = 'hoge' urlpatterns = [ path('<int:page>/', views.HogeListView, name="hoge_list"), path('create', views.HogeCreateView, name="hoge_create"), ] |
■app/views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from django.views import generic from django.contrib import messages from django.shortcuts import render,redirec from .models import hoge from django.core.paginator import Paginator def HogeCreateView(request): if (request.method == 'POST'): model = Hoge() Recode = HogeCreateForm(request.POST, instance=model) Recode.save() messages.success(request, 'レコードを新規追加しました。') return redirect(to='/hoge/1/') params = { 'url': '/hoge/create' } return render(request, 'hoge_create.html', params) |
チョット解説
上に載せた views.pyはFormを活用した例です。ゴリゴリ行く場合は9行目~11行目を変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#データ適用 NULLに文字列Noneが入ることを回避 if ((request.POST['column01'] == 'None')or(request.POST['column01'] == '')): column01 = None else: column01 = request.POST['column01'] if ((request.POST['column02'] == 'None')or(request.POST['column02'] == '')): column02 = None else: column02 = request.POST['column02'] if ((request.POST['column03'] == 'None')or(request.POST['column03'] == '')): column03 = None else: column03 = request.POST['column03'] Recode = Hoge( column01=column01, column02=column02, column03=column03 ) Recode.save() |
関数で書いた時に悩むところ
- NULLを入れたいのにNoneが登録される(場合によってはこれが原因でバリデーションエラーになる)
これもUpdateの記事で書いた内容と同じなので、前回記事をご参照ください。
まとめ
Updateを構築できればCreateはわけなく処理できます。Deleteも同じです。
Deleteはobject.delete()だけで処理できてしまいます。
1 2 3 4 5 6 7 8 |
def HogeDeleteView(request,pk): object = Hoge.objects.get(pk=pk) if (request.method == 'POST'): object.delete() messages.success(request, '削除しました') return redirect(to='/hoge') (以下略) |
Update書けるようになると悩みませんね。
-
前の記事
サイト内のGoogle広告(AdSense)が表示されなくなったので調べてみた 2021.02.17
-
次の記事
Django:汎用ビュー(プリセットClass) の種類と用途について 2021.02.17
コメントを残す