0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-18

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のところにアプリケーション定義します
    image.png
    image.png
  2. モデルクラス作成します
    image.png
  3. アプリのマイグレーションを作成します
    python manage.py makemigrations [app_name]
    image.png
    実行終了するとマイグレーションIDが作成されます、今回の実行は「0001」です
    「food/migrations」に「0001_initial.py」作成されたのを確認できます
    image.png
  4. モデルのテーブルを作成します
    python manage.py sqlmigrate [app-name] [migrations-id]
    image.png
    作成されるテーブル名は[app_name]_[mode_name]にからなり
  5. マイグレーションを再実現します
    python manage.py migrate
    image.png

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

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

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
image.png

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

作成したアカウントを使って登録しますしょ~
あ~ まずは、runserverコマンドの実行を忘れないようね!文章忘れたら :point_right:コマンド一覧をご参考、どうぞ
image.png
登録できました、Adminページからユーザー、管理グループなど作成できます。触ってみてね

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

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

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

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

更にデータベースを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")

image.png
###migrations作成
python manage.py make makemigrations [app-name]
image.png

SQL更新

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

マイグレーション再実現

python manage.py migrate
image.png

結果を確認しましょ~
image.png

よく出来ましたね

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?