こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。
前回DjangoのFormViewとmodel、HTMLのform要素について理解を深めていきました。
今回はその学びの中で出てきた『FormViewではなくてCreateViewでも同様に実装できる』ということを確かめるためにコーディングをしてみました。
github
以下にコード一式を格納しております。
環境構築
環境イメージ
今回は以下の環境で構築しております。createTestPJという名前のプロジェクトとMyCreateという名前のアプリを作成しています。
構成要素は以前のFormViewを継承させた環境と殆ど同じです。違いとしては、forms.pyを用意していないことです。
個人的に重要そうだと思う部分のメモ
MyCreate/views.py
from django.views.generic.edit import CreateView
from django.urls import reverse_lazy
from .models import MyCreateTable
class MyCreateView(CreateView):
template_name = "MyCreate.html"
model = MyCreateTable
fields = ('username', 'password', 'email', 'memo')
success_url = reverse_lazy('MyCreate:MyCreatePage')
- FormViewを継承する時はviewsでmodelを定義することはなかったですが、CreateViewを継承する時はここで定義するようです。また、fieldsもここで定義するようです。
実行結果
入力フォームは以下となっております。
上からユーザ名、パスワード、メールアドレス、メモですね。
Try MyCreateボタンを押下してみます。
success_url = reverse_lazy('MyCreate:MyCreatePage')との記載から元の場所に戻されます。
admin管理画面を確認してみます。正常に作れているようですね。formsを別途用意しなくていいことから、CreateViewを継承したほうが簡単に実装できそうだなと思いました。