Models
- データベースを作成するため
- このにclassを作成します
modelを作成します
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内のクラス定義
アプリケーションで使うデータベースの定義を自動的に作成、管理する機能です。
デフォルトアプリケーション
# 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
ユーザー定義アプリケーション
マイグレーション新規作成
- settings.pyファイルにApplication definitionのところにアプリケーション定義します
- モデルクラス作成します
- アプリのマイグレーションを作成します
python manage.py makemigrations [app_name]
実行終了するとマイグレーションIDが作成されます、今回の実行は「0001」です
「food/migrations」に「0001_initial.py」作成されたのを確認できます
- モデルのテーブルを作成します
python manage.py sqlmigrate [app-name] [migrations-id]
作成されるテーブル名は[app_name]_[mode_name]にからなり - マイグレーションを再実現します
python manage.py migrate
インターラクティブShellを利用します
起動するコマンドです
python manage.py shell
>>> 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.pyにadmin.site.register([model-name])
書き込みます
出た!
データベースからデータを取り出します
データ取得方法は、
Model(Item) - Manager(objects) - Method(all) ⇒ Item.objects.all()
更にデータベースをUPDATEします
作成した後プロジェクトを追加したい場合はどうすればいいのかでしょか
food_itemテーブルはitem_imageカラムを追加するような例としてやってみます
models更新
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 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 ~使ったコマンド~