Djangoで単語帳開発Part2

こんにちは、にわこまです。

今回は、modelを作成して、実際にデータを格納してたいと思います。

 

「Djangoで単語帳開発」シリーズはDjangoのチュートリアルとして利用されることを目的としています。

誤字脱字や分かりにくい点がありましたら、ご連絡お願い致します。

 

 

スポンサードサーチ


Djangoで単語帳開発Part2

モデルを簡単に言うとデータベースのテーブル(表)のことです。もっと簡単に言うとExcelの表のことです。

 

モデルに1つひとつデータを格納していき、取り出したいときに、いつでも取り出すことが出来ます。

また、「名前がAから始まる人」のように条件を指定してデータを取り出すこともできます。

 

モデルでは、格納したいデータに対して、適切なフィールドを設定しなければなりません。

例えば、
名前を格納したいならば文字列のフィールドを設定
年齢を格納したいならば、数値のフィールドを設定
誕生日を格納したいならば、日付のフィールドを設定
といったようにします。

 

 

モデルの作成

model(モデル)とは、データベースのテーブル(表)のことであると説明しました。

モデルを作成するには、まずテーブル名を決めます。その後、テーブルに格納するデータの型などを設定していきます。

 

データベースとテーブルのイメージを下に示します。

 

プロジェクト内でデータベースとテーブルを有効にするために、以下のコマンドを実行します。

python manage.py migrate

 実行すると、「Applying ~ 」という行が数十行出力されます。

 

次にモデルを作成します。flashcard/models.pyを編集します。

from django.db import models

# Create your models here.
class MyWord(models.Model):
    id = models.AutoField(primary_key=True)
    en_word = models.CharField(max_length=200, unique=True)
    jp_word = models.CharField(max_length=200)
    def __str__(self):
        return self.en_word

 

コードの解説

テーブル名にあたるのが「MyWord」です。

idは、通し番号として利用します。「AutoField」はユーザが特に操作しなくてもデータが格納されるフィールドです。

「primary_key」はその行を一意に決めるためのものです。

例えば、「id=1」と指定したときにいくつもデータが抽出されてしまっては困ります。それを回避するためのものです。

 

en_wordは、英単語を格納するために使います。「CharField」は文字列を格納するときに使います。

「max_length」は文字列の長さの最大値を決めるためのものです。「unique」は同じ英単語を格納しないようにするためのものです。

 

jp_wordは、日本語訳を格納するために使います。

 

「def __str__(self):」は、Django Adminで確認するときに表示されるデータを指定しています。

 

 

次に、 モデルをプロジェクト内で有効にさせます。myapp/myapp/settings.pyを編集します。「INSTALLED_APPS」の最後にflashcardを追加します。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'flashcard', #追加部
]

 

次に、 モデルを定義したり、変更したり、削除した場合は、それを反映させるために以下の2つのコマンドを実行します。

# コマンド1つ目↓
python manage.py makemigrations flashcard

#実行結果↓
Migrations for 'flashcard':
  flashcard\migrations\0001_initial.py
    - Create model MyWord
# コマンド2つ目↓
python manage.py migrate

#実行結果↓
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, flashcard, sessions
Running migrations:
  Applying flashcard.0001_initial... OK

 

以上でモデルの定義が完了です。

 

完成したモデルのデータベースとテーブルのイメージ図を下に示します。

 

しかし、本当にモデルを作成できているのか不安です。そのため、Django Adminを使って確認を行います。

 

 

スポンサードサーチ


Django Adminで確認

Django Adminは、管理サイトを自動生成してくれるものです。また、その管理サイトでは定義したモデルやそのモデルに格納されているデータを確認することができます。

 

まず、定義したモデルを管理サイトで見ることができるように登録をします。flashcard/admin.pyを編集します。

from django.contrib import admin
from .models import MyWord

# Register your models here.
admin.site.register(MyWord)

 

以上で登録は完了です。

 

Django Adminを管理するユーザを作成します。以下のコマンドを実行します。

python manage.py createsuperuser

 

ユーザ名とメールアドレスとパスワードを入力するように言われます。パスワードに関しては、短すぎたりユーザ名と似すぎたりしていると警告を受けます。

「Superuser created successfully.」と最後の行に出力されたら、管理ユーザの作成は完了です。

 

次に、サーバを起動させます。以下のコマンドを実行します。

python manage.py runserver

 

起動したら「http://127.0.0.1:8000/admin/」にある管理サイトにアクセスします。以下のような画面が表示されます。

 

ユーザ名とパスワードを入力してログインすると以下のような画面が表示されます。FLASHCARDの欄にMy wordsが登録されていることが確認できます。

 

 

データを追加

テーブルが定義されていることを確認することができたため、実際にデータを入れてみます。

 

「My words」の追加をクリックします。

 

「En word」と「Jp word」の入力ボックスに適当な単語を入力します。

 

入力が完了したら、「保存」をクリックします。

 

正しく保存できるとページが自動で移動します。入力した単語が格納されていることが確認できます。

 

上の画像で赤い線で囲った部分に表示されているのは、モデルを作成したときに「def __str__(self)」で指定したものです。

ここでは、「self.en_word」と設定したため、英単語が表示されています。

 

 

スポンサードサーチ


まとめ

今回は、Djangoで単語帳開発Part2ということで、モデルの定義とその確認を行いました。

 

モデルの、定義、変更、削除を行う度に「python manage.py makemigrations アプリ名」と「python manage.py migrate」を実行します。

 

本当にモデルを定義、変更、削除できているか不安になったら、Django Adminで確認を行います。

 

Djangoで単語帳開発Part3では、トップページの作成とモデルに格納されているデータ一覧を表示する単語リストページを作成します。

最後までお読みいただきありがとうございます。


スポンサードサーチ