Django modelインスタンスでsaveメソッドを使う方法

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2022年1月)

当記事はこんなお悩みがある方へ向けて書かれています

「Djangoのsaveメソッドを使って保存する方法が知りたい!」

「データの保存方法ってどんな方法があるの?」

「データ保存の実例があれば教えて欲しい!」

当記事を通じてお伝えすること

  • Django saveメソッドでmodelへデータを保存する2ステップ
  • saveメソッドを使わずに保存する方法と比較|オススメは?
  • クリエイトビューの実例を紹介

実例付きでご紹介しますので、当記事を読み終わる頃にはsaveメソッドについては完全マスターです!

✔YouTube解説動画

当記事の内容は動画を見ながら進めると、約15分程度で完了します。

動画ならではの情報も解説しているので、記事と一緒にご覧ください。

動画の概要欄には、単元ごとのコードを紹介しているgithubページも載せています。

✔独学におすすめ

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

saveメソッドでmodelクラスへデータを保存する2ステップ

インスタンスの作成

変数名 = モデルクラス(フィールド名1=値1, フィールド名2=値2, …)

新たなモデルクラスインスタンスを作成します

インスタンスの保存

作成したインスタンス.save()

インスタンスを作成しただけでは保存できません

saveメソッドを使って保存しましょう!

createメソッドで保存する方法

モデルインスタンス.objects.create(フィールド名=値、、、)

メリット

いちいち、saveメソッドを使用する必要はありません

一行で保存まで完了します

デメリット

インスタンスが作られません

実際に保存する前後でインスタンスを使った記述をしたい場合は不便です

クリエイトビューの実例を紹介

i got it!

実際の例を見ながら、今回見てきたものを整理していきましょう

フォームの表示から値を受け取るまで

見た目はともかくとして、カンタンなフォームを作成しました

【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つあります

  1. インスタンスを作り、saveメソッドを使う方法
  2. createメソッドでダイレクトに保存する方法

それぞれ一長一短ですので、場面に応じて使い分けましょう!

ただ、色々と試してみてお気づきかもしれませんが、このままですとフォームが空のままでも保存ができてしまいます

HTML上でフォームを入力必須にすることもできるのですが、Djangoには様々なメソッドが用意されているforms.Form」クラスを使い、フォームを作成・表示する方法がとても便利です

この方法を覚えておくと、今後の編集機能などもカンタンに実装できます

次のステップとして、ぜひマスターしていきましょう!

タイトルとURLをコピーしました