【Django】Build web apps ~3章:Modelsとデータベース~


Models

  • データベースを作成するため
  • このにclassを作成します

modelを作成します

food/modes.py
from django.db import models

# Create your models here.
## has return
class Item(models.Model):
    def __str__(self):
        return self.item_name
    item_name = models.CharField(max_length=200)
    item_desc = models.CharField(max_length=200)
    item_price = models.IntegerField()

## hasn't return
class Person(models.Model):
    person_name = models.CharField(max_length=100)
    person_sex = models.CharField(max_length=10)

Migrations

models.py内のクラス定義
アプリケーションで使うデータベースの定義を自動的に作成、管理する機能です。

デフォルトアプリケーション

mysite/settings.py
# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

マイグレーションを実現
python manage.py migrate

ユーザー定義アプリケーション

マイグレーション新規作成
1. settings.pyファイルにApplication definitionのところにアプリケーション定義します


2. モデルクラス作成します

3. アプリのマイグレーションを作成します
python manage.py makemigrations [app_name]

実行終了するとマイグレーションIDが作成されます、今回の実行は「0001」です
「food/migrations」に「0001_initial.py」作成されたのを確認できます

4. モデルのテーブルを作成します
python manage.py sqlmigrate [app-name] [migrations-id]

作成されるテーブル名は[app_name]_[mode_name]にからなり
5. マイグレーションを再実現します
python manage.py migrate

インターラクティブShellを利用します

起動するコマンドです
python manage.py shell

same
>>> from food.models import Item, Person
>>> a = Item(item_name="Apple", item_desc="ringo", item_price=10)
>>> b = Person(person_name="Lan Huong", person_sex="female")
>>> Item
<class 'food.models.Item'>
>>> Person
<class 'food.models.Person'>
>>> Item.objects.all()
<QuerySet []>
>>> Person.objects.all()
<QuerySet []>
>>> a.save()
>>> Item.objects.all()
<QuerySet [<Item: Apple>]>
>>> b.save()
>>> Person.objects.all()
<QuerySet [<Person: Person object (1)>]>
>>>

Note: Personモデルクラスはリターンしてないのでオブジェクトを取得結果はオブジェクト数量のみ表示されます
退出する場合、exit()を実行します
いつかに「Shellでデータベースを操作する記事」を作成するわね^O^

Adminページを管理します

Admin accountを作成します

Adminページ接続できるためにAdmin accountを作成するのが必要です、次のコマンドを実行します
python manage.py createsuperuser

例として
Username (leave blank to use '912767'): lehuong
Email address: lehuong@gmail.com
Password: lehuong

作成したアカウントを使って登録しますしょ~
あ~ まずは、runserverコマンドの実行を忘れないようね!文章忘れたら コマンド一覧をご参考、どうぞ

登録できました、Adminページからユーザー、管理グループなど作成できます。触ってみてね

Adminページに対象オブジェクトモデルを管理します

で、以前に作成したItemオブジェクトモデルはどこ?
Itemオブジェクトが表示される為admin.pyファイルにオブジェクト情報を追加しないとね
Point:[app-name]/admin.pyadmin.site.register([model-name])書き込みます

出た!


データベースからデータを取り出します

データ取得方法は、
Model(Item) - Manager(objects) - Method(all) ⇒ Item.objects.all()

更にデータベースをUPDATEします

作成した後プロジェクトを追加したい場合はどうすればいいのかでしょか
food_itemテーブルはitem_imageカラムを追加するような例としてやってみます

models更新

food/models.py
class Item(models.Model):
    def __str__(self):
        return self.item_name
    item_name = models.CharField(max_length=200)
    item_desc = models.CharField(max_length=200)
    item_price = models.IntegerField()
    item_image = models.CharField(max_length=500,
default="https://cdn.dribbble.com/users/1963449/screenshots/5915645/404_not_found.png")

migrations作成

python manage.py make makemigrations [app-name]

SQL更新

pythn manage.py sqlmigrate [app-name] [migrations-id]

マイグレーション再実現

python manage.py migrate

結果を確認しましょ~

よく出来ましたね

ちょっとでもモデルとデータベースの関連が分かりましたか
では、
操作するコマンドを集めますしょ
python manage.py make makemigrations [app-name]
反映する時、[django-project]/settings.pyの固定変数INSTALLED_APPSに[app-name]が設定されるし、[app-name]/models.pyに新しいモデルクラスが追加されるのが必要です
pythn manage.py sqlmigrate [app-name] [migrations-id]
作成した後にマイグレーション再実現しないと更新した情報は反映されません
python manage.py migrate
python manage.py shell
python manage.py createsuperuser

関連記事
・【Django】Build web apps ~2章:ViewsとURL Patterns~
・【Django】Build web apps ~4章:Templates~
・【Django】Build web apps ~使ったコマンド~