暇人じゃない

「はじめての Django アプリ作成」チュートリアルをやったメモ その1

はじめての Django アプリ作成、その 1 — Django v1.0 documentation http://djangoproject.jp/doc/ja/1.0/intro/tutorial01.html をやったメモを書いて行きます。 公式と殆ど同じ事を書いている個人的なメモなので、公式のチュートリアルを読む事をオススメします。

インストールからプロジェクトの作成については以下の記事で書いています。 Django のインストールからプロジェクトの作成まで | 暇人じゃない http://chocoby.jp/blog/2010/10/22/django-setup/

環境: MacOS X 10.6.4 Python 2.6.5 Django 1.2.3

モデルの作成

モデルの定義

[Python] from django.db import models

class Poll(models.Model): question = models.CharField(maxlength=200) pubdate = models.DateTimeField(‘date published’)

class Choice(models.Model): poll = models.ForeignKey(Poll) choice = models.CharField(max_length=200) votes = models.IntegerField() “`

ForeignKey でリレーションを定義している。 Choice が1つの Poll に関連付けられている。

モデルを有効にする

settings.py の INSTALLED_APPS に mysite.polls を追加する

[Python] INSTALLED_APPS = ( 'django.contrib.auth’, 'django.contrib.contenttypes’, 'django.contrib.sessions’, 'django.contrib.sites’, 'django.contrib.messages’, 'mysite.polls’, ) ”`

Django が polls アプリケーションを知ることが出来るようになった。

sql polls で polls 用のテーブルを作成する SQL 文を表示する。

[Bash] $ python manage.py sql polls “`

SQLite だとこんな感じ。

[SQL] BEGIN;CREATE TABLE "pollspoll” ( “id” integer NOT NULL PRIMARY KEY, “question” varchar(200) NOT NULL, “pubdate” datetime NOT NULL ) ; CREATE TABLE “pollschoice” ( “id” integer NOT NULL PRIMARY KEY, “pollid” integer NOT NULL REFERENCES “polls_poll” (“id”), “choice” varchar(200) NOT NULL, “votes” integer NOT NULL ) ;COMMIT; “`

syncdb で、テーブルをデータベースに作成する。

[Bash] $ python manage.py syncdb Creating table pollspoll Creating table pollschoice Installing index for polls.Choice model No fixtures found. ”`

SQLite で確認してみる。

[Bash] $ sqlite3 sqlite.db SQLite version 3.6.23.1 Enter “.help” for instructions Enter SQL statements terminated with a “;” sqlite> .tables authgroup authuseruserpermissions authgrouppermissions djangocontenttype
authmessage djangosession
authpermission djangosite
authuser pollschoice
authusergroups polls_poll
sqlite> .quit “`

SQLite を終了させるには .quit

API で遊んでみる

対話シェルを起動

[Bash] $ python manage.py shell ”`

[Python]

from mysite.polls.models import Poll, Choice

Poll は一つもできていない

Poll.objects.all() “`

新しく Poll を作成する

import datetime p = Poll(question="Hello, world!”, pub_date=datetime.datetime.now()) #作成したオブジェクトを DB に保存。明示的に save() を呼ぶ必要がある p.save()

ID を表示する

p.id 1 p.question 'Hello, world!’ 値の変更 p.pub_date = datetime.datetime(2010, 12, 24, 0, 0) p.save() Poll.objects.all() [] “`

unicode

[Python] ”` って分かりにくい。

unicode メソッドを作って Poll.objects.all() や Choice.objects.all() が呼び出された時は question カラム や choice カラムの値を返すようにする。

[Python] class Poll(models.Model): def unicode(self): return self.question

class Choice(models.Model): def unicode(self): return self.choice “`

以下のように表示が変わる。

[Python] [] ↓ [] ”` 今日作成された poll か調べるメソッド

[Python] import datetime def waspublishedtoday(self): return self.pub_date.date() == datetime.date.today() “`

waspublishedtoday() を定義した。 確認してみる。

[Python]

p = Poll.objects.get(pk=1) p.waspublishedtoday() False ”`