「はじめての Django アプリ作成」チュートリアルをやったメモ その2
はじめての Django アプリ作成、その 2 — Django v1.0 documentation http://djangoproject.jp/doc/ja/1.0/intro/tutorial02.html
前回の続きでチュートリアルを追ってみた個人的メモです。
環境: MacOS X 10.6.4 Python 2.6.5 Django 1.2.3
管理サイトの有効化
settings.py
INSTALLED_APPS に django.contrib.admin を追加 or コメントアウトを解除
INSTALLED_APPS = (
'django.contrib.admin',
)
管理サイト用のテーブルの作成
python manage.py syncdb
URLconf
追加 or コメントアウトを解除
#urls.py
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^admin/', include(admin.site.urls)),
)
管理サイトへアクセス
python manage.py runserver でサーバーを起動して http://127.0.0.1:8000/admin にアクセス
チュートリアルその 1 で、プロジェクトのデータベースを作成する時に作成した管理者ユーザーとパスワードでログインする。
Poll モデルを編集できるようにする
from django.contrib import admin
admin.site.register(Poll)
上のコードを追加してページをリロードすると、Poll モデルが表示される。 色々触ってみる。
管理サイトの表示項目をカスタマイズ
フィールドの表示順番を変更する
Date Published フィールドを Question フィールドの前に表示する。
class PollAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question']
admin.site.register(Poll, PollAdmin)
Question フィールドと Date Published フィールドを別々のフィールドセットに表示する。
class PollAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question']}),
('Date information', {'fields': ['pub_date']}),
]
admin.site.register(Poll, PollAdmin)
fieldsets に 'classes': ['collapse']を指定すると、そのフィールドセットが折りたたまれた状態になる。
class PollAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
admin.site.register(Poll, PollAdmin)
Choice モデルの追加
Choice モデルを admin に登録する。
admin.site.register(Choice)
Choice と Poll が同時に入力できるフォームが表示される。 ここで Poll に対して Choice を追加したり、Poll を選択したり新たに追加したりできる。
でも Poll の中で Choice を複数追加できたほうがいいよね! じゃあそうしよう。
admin.site.register(Choice) を削除
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class PollAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Poll, PollAdmin)
http://127.0.0.1:8000/admin/ にアクセスして、Add poll に移動
Poll に対して 3 つの Choice が一度追加できるようになった! この数は ChoiceInline の extra で変更できる
もうちょっと表示をコンパクトにしたい
class ChoiceInline(admin.StackedInline):
↓
class ChoiceInline(admin.TabularInline):
編集したい Poll を選択するページをカスタマイズする
表示するカラムを増やす
class PollAdmin(admin.ModelAdmin):
#
list_display = ('question', 'pub_date', 'was_published_today')
pub_date と was_published_today が表示されるようになる。 was_published_today 以外のカラムのヘッダをクリックすれば並び替えできる。 CakePHP でいう paginate みたいなものかな。
カラム名の変更
class Poll(models.Model):
#
was_published_today.short_description = 'Published today?'
表示するカラム名を'Published today?'に変更できる
フィルターの追加
class PollAdmin(admin.ModelAdmin):
#
list_filter = ['pub_date']
右側に Any date/Today/Past 7 days/This month/This year が出てきた。 Poll が「今日作成した Poll」などといった条件でフィルタリングできるようになった!すごい。
検索ボックス
class PollAdmin(admin.ModelAdmin):
#
search_fields = ['question']
question フィールドに対しての検索ボックスが表示される。
階層で絞り込み
class PollAdmin(admin.ModelAdmin):
#
date_hierarchy = 'pub_date'
さっきの範囲指定に加えて pub_date 年/月/日と階層で検索できるようになる。
もちろんページング機能もある。 検索機能との連携はバッチリ...!らしい。
管理サイトの見た目をカスタマイズ
テンプレート置き場の作成 mysite 以下に mytemplates ディレクトリを作成
settings.py の TEMPLATE_DIRS にテンプレート置き場を指定する。
TEMPLATE_DIRS = (
'/Users/chocoby/Development/hoge/mysite/mytemplates'
)
mytemplates ディレクトリ以下に admin ディレクトリを作成、ここに管理サイトのテンプレートを置く。
Django デフォルトの管理サイトのテンプレートをコピーする
$ cp ~/Development/Django-1.2.3/django/contrib/admin/templates/admin/base_site.html mytemplates/admin/
管理サイトのタイトルの変更 mytemplates/admin/base_site.html
{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %} ↓
{% block title %}{{ title }} | {% trans 'Hoge site admin' %}{% endblock %}
見出しのタイトルの変更 mytemplates/admin/base_site.html
<h1 id="site-name">{% trans 'Django administration' %}</h1>
↓
<h1 id="site-name">{% trans 'Hoge administration' %}</h1>
admin テンプレートは django/contrib/admin/templates 内から mytemplates に階層を守って突っ込めば、オーバーライドすることができる。
管理サイトトップページのカスタマイズ
$ cp ~/Development/Django-1.2.3/django/contrib/admin/templates/admin/index.html mytemplates/admin/
admin/index.html を編集すると、管理サイトのトップページをカスタマイズすることができる。