はじめてのDjangoアプリ作成(その2)

[ 関連エントリ ]
その1 : プロジェクト作成 & モデル作成
その2 : admin サイトの使い方
その3 : ビュー & テンプレートを作る(照会画面)
その4 : フォームを作る(入力画面)

[ 参考サイト ]
Django ドキュメントはじめての Django アプリ作成、その 2

――――――――

■ adminサイトの有効化

(01) ファイル「urls.py」を編集。3箇所のコメントアウトを解除。

from django.conf.urls.defaults import *

# Uncomment the next two lines to enable the admin:
from django.contrib import admin # ★ コメントアウト解除
admin.autodiscover() # ★ コメントアウト解除
 
urlpatterns = patterns('',
    # Example:
    # (r'^mysite/', include('mysite.foo.urls')),
 
    # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
    # to INSTALLED_APPS to enable admin documentation:
    # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
 
    # Uncomment the next line to enable the admin:
    (r'^admin/', include(admin.site.urls)), # ★ コメントアウト解除
)

(02) ファイル「settings.py」を編集。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin', # ★ 追記
    'mysite.polls'
)

(03) 下記コマンド実行にて、テーブル作成(DB同期)
    python manage.py syncdb

(04) コマンドプロンプトにて、DBにテーブルが作成されたことを確認する。

    show tables;

    +―――――――――-+
    | Tables_in_db_mysite
    +―――――――――-+
    | auth_group
    | auth_group_permissions
    | auth_message
    | auth_permission
    | auth_user
    | auth_user_groups
    | auth_user_user_permissions
    | django_admin_log
    | django_content_type
    | django_session
    | django_site
    | polls_choice
    | polls_poll
    +―――――――――-
    13 rows in set (0.02 sec)

(05) 下記コマンド実行にて、Django開発サーバを起動。
    python manage.py runserver

■ adminサイトにログイン

(01) ブラウザにて「http://127.0.0.1:8000/admin/」にアクセスして、下記ページが表示されることを確認。

(02) adminサイトにスーパーユーザのアカウントでログイン

■ adminサイトにて、モデル編集可にする(親テーブル編)

(01) ファイル「models.py」を編集。

from django.contrib import admin
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 = models.CharField(max_length=200)
    votes = models.IntegerField()
 
admin.site.register(Poll) # ★ 追記

(02) adminサイトをリロードして、メニュー「Polls」が登場してることを確認。

(03) adminサイトにて、親テーブル(polls_poll)の照会・挿入・更新・削除ができる。

(04) SQL文にて、正しくデータが反映されていることを確認。
    select * from polls_poll;

    +―-+――――――――–+
    | id | question
    +―-+――――――――–+
    | 2 | sitsumon no naiyou dayo.
    +―-+――――――――–+

    ※ adminサイトのデータの並びは、入れ替えたり、項目ごとに分割表示したりできる。

■ adminサイトにて、モデル編集可にする(子テーブル編)

(01) ファイル「models.py」を編集。データの親子関係が見れるようにする。

from django.contrib import admin
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 = models.CharField(max_length=200)
    votes = models.IntegerField()
 
# ★ 追記 START
class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3
 
class PollAdmin(admin.ModelAdmin):
    inlines = [ChoiceInline]
    list_filter = ['pub_date']
    search_fields = ['question']
    list_display = ('question', 'pub_date')
# ★ 追記 END
 
try:
    admin.site.register(Poll, PollAdmin) # ★ 正体不明のエラー対策のため、tryで囲む。
except:
    pass

(02) adminサイトにて、子テーブル(polls_choice)の照会・挿入・更新・削除ができる。

(09) adminサイトにて、親テーブル(polls_poll)のフィルタ & 検索ができる。