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

Django

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

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

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

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

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

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

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

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

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

✔月9,800円でWebデザインが学べる

デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。

特徴は以下の通り。

  • 初期費用不要
  • 教材が使い放題
  • 案件で収入も得られる

デザナルは稼ぎながら学べる、格安のWebデザインスクールです。

>>詳細はこちら<<

安い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」クラスを使い、フォームを作成・表示する方法がとても便利です

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

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

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

関連書籍

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