Django のモデル作成
Creating models
次はアプリケーションを作成して、そのアプリケーションで使うモデルを作成する。
まずは polls アプリを作成。
(venv)[paraches@praches.com myHeroku]$ python manage.py startapp polls (venv)[paraches@praches.com myHeroku]$ ls Procfile fitsync manage.py polls requirements.txt sqlite.database venv (venv)[paraches@praches.com myHeroku]$ ls polls/ __init__.py models.py tests.py views.py (venv)[paraches@praches.com myHeroku]$
models.py に Poll と Choice を作成。
(venv)[paraches@praches.com myHeroku]$ cat polls/models.py from django.db import models class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): poll = models.ForeignKey(Poll) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) (venv)[paraches@praches.com myHeroku]$
Activating models
settings.py に polls アプリを登録。
settings.py の INSTALLED_APPS はこんな感じになる。
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'polls', )
models.py から作られるテーブルを確認。
(venv)[paraches@praches.com myHeroku]$ python manage.py sql polls BEGIN; CREATE TABLE "polls_poll" ( "id" integer NOT NULL PRIMARY KEY, "question" varchar(200) NOT NULL, "pub_date" datetime NOT NULL ) ; CREATE TABLE "polls_choice" ( "id" integer NOT NULL PRIMARY KEY, "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"), "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL ) ; COMMIT; (venv)[paraches@praches.com myHeroku]$
syncdb してみる。
(venv)[paraches@praches.com myHeroku]$ python manage.py syncdb
問題なし。
ところで、settings.py でデータベース設定を行っていない場合、データベースファイルはどこにできるんだろう?
と、思って見てみたら manage.py と同じ場所にできてた。
(venv)[paraches@praches.com myHeroku]$ ls Procfile fitsync manage.py polls requirements.txt sqlite.database venv (venv)[paraches@praches.com myHeroku]$
データベースのファイル名は settings.py の最後に付け足した dj_database_url.config に渡した値。
sqlite は postgres や mySQL に比べて自分でユーザ作ったり色々とする必要がないので楽チン。
Playing with the API
shell で遊んでみる。
(venv)[paraches@praches.com myHeroku]$ python manage.py shell Python 2.7.2 (default, Mar 21 2012, 03:20:49) [GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from polls.models import Poll, Choice >>> Poll.objects.all() [] >>> from django.utils import timezone >>> p = Poll(question="What's new?", pub_date=timezone.now()) >>> p.save() >>> p.id 1 >>> p.question "What's new?" >>> p.pub_date datetime.datetime(2013, 5, 5, 15, 4, 50, 134537, tzinfo=<UTC>) >>> p.question = "What's up?" >>> p.save() >>> Poll.objects.all() [<Poll: Poll object>] >>>
shell で遊ぶ部分はもう少し先があるけど割愛。
というわけで Writing your first Django app, part 1 は終了。