(最終更新月:2022年1月)
✔当記事はこんなお悩みがある方へ向けて書かれています
「Djangoのsaveメソッドを使って保存する方法が知りたい!」
「データの保存方法ってどんな方法があるの?」
「データ保存の実例があれば教えて欲しい!」
✔当記事を通じてお伝えすること
- Django saveメソッドでmodelへデータを保存する2ステップ
- saveメソッドを使わずに保存する方法と比較|オススメは?
- クリエイトビューの実例を紹介
実例付きでご紹介しますので、当記事を読み終わる頃にはsaveメソッドについては完全マスターです!
✔YouTube解説動画
当記事の内容は動画を見ながら進めると、約15分程度で完了します。
動画ならではの情報も解説しているので、記事と一緒にご覧ください。
動画の概要欄には、単元ごとのコードを紹介しているgithubページも載せています。
saveメソッドでmodelクラスへデータを保存する2ステップ
インスタンスの作成
変数名 = モデルクラス(フィールド名1=値1, フィールド名2=値2, …)
新たなモデルクラスインスタンスを作成します
インスタンスの保存
作成したインスタンス.save()
インスタンスを作成しただけでは保存できません
saveメソッドを使って保存しましょう!
createメソッドで保存する方法
モデルインスタンス.objects.create(フィールド名=値、、、)
メリット
いちいち、saveメソッドを使用する必要はありません
一行で保存まで完了します
デメリット
インスタンスが作られません
実際に保存する前後でインスタンスを使った記述をしたい場合は不便です
クリエイトビューの実例を紹介
実際の例を見ながら、今回見てきたものを整理していきましょう
フォームの表示から値を受け取るまで
見た目はともかくとして、カンタンなフォームを作成しました
【templates > nippo > nippo-form.html】
{% extends "base.html" %}
{% block title %}日報を作成しよう{% endblock %}
{% block content %}
<form method="POST">{% csrf_token %}
<div>
<input name="title" type="text" placeholder="タイトル..."/>
</div>
<div>
<textarea type="text" name="content" placeholder="日報..."></textarea>
</div>
<button type="submit">送信</button>
</form>
{% endblock %}
フォームから値を受け取るview関数です(保存のための記述はこれからです)
【views.py】※printメソッドを使ってターミナル上に値が出力されるのをご確認ください
def nippoCreateView(request):
template_name="nippo/nippo-form.html"
if request.POST:
title = request.POST["title"]
content = request.POST["content"]
return render(request, template_name)
受け取った値を保存していきます
データを新規登録・保存する方法
当日報アプリでは、
obj = NippoModel(title=値, content=値)
obj.save()
とすることで保存できます
view関数全体は、
def nippoCreateView(request):
template_name="nippo/nippo-form.html"
if request.POST:
title = request.POST["title"]
content = request.POST["content"]
obj = NippoModel(title=title, content=content)
obj.save()
return render(request, template_name)
のようになります
追記した点は下記のとおりです
def nippoCreateView(request):
...
if request.POST:
...
obj = NippoModel(title=title, content=content)
obj.save()
...
フォームが送信されてから保存をするようにif文も追記する必要があります
まとめ
これまでのことをまとめます
保存するための方法は2つあります
- インスタンスを作り、saveメソッドを使う方法
- createメソッドでダイレクトに保存する方法
それぞれ一長一短ですので、場面に応じて使い分けましょう!
ただ、色々と試してみてお気づきかもしれませんが、このままですとフォームが空のままでも保存ができてしまいます
HTML上でフォームを入力必須にすることもできるのですが、Djangoには様々なメソッドが用意されている「forms.Form」クラスを使い、フォームを作成・表示する方法がとても便利です
この方法を覚えておくと、今後の編集機能などもカンタンに実装できます
次のステップとして、ぜひマスターしていきましょう!