今回はAdminサイトの構築。
Djangoはこれが売りらしい。
DBさえ与えてしまえばCRUDできるアプリが自動でできるっていうのはSalesforceに近い感じがする。
settting.pyを変更
- INSTALLED_APPSの’django.contrib.admin’のコメントアウトを解除
- python manage.py syncdb実行(実行しなくても大丈夫?かも)
urls.pyを変更(コメントアウトを削除)
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^mysite/', include('mysite.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
python manage.py runserver で起動してlocalhost:8000/admin で管理画面にアクセス。
クレデンシャルはdjangoアプリで初めてsyncdbしたときに作成したもの
モデル毎の管理画面の設定
このままだとpollsアプリの管理画面が設定されていないのでpolls内にadmin.pyを作成from django.contrib import admin
from polls.models import Poll
admin.site.register(Poll)
管理画面の項目を表示する順番の変更(admin.py)
class PollAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question']
admin.site.register(Poll, PollAdmin)
セクションで分ける場合(admin.py)
fieldsets = [
(None, {'fields': ['question']}),
('Date information', {'fields': ['pub_date'], 'classes' : ['collapse']}),
#collapseクラス付与でセクション開閉可能に
]
関連リスト表記(admin.py)
from django.contrib import admin
from polls.models import Poll, 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)
#admin.site.register(Choice)
インライン表記の方法を項目を列で区切る場合(admin.py)
ChoiceInlineの継承クラスを admin.StackedInline → admin.TabularInline
モデルのリストの列名を変更(admin.py)
PollAdminのプロパティに以下を追加する list_display = (‘question’, ‘pub_date’, ‘was_published_recently’)
メソッドを列名に指定した時の設定(models.py)
対象メソッドに以下のようにプロパティを付与(ソーティングできたり列名変更したり)def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
リストの表記変更(admin.py)
PollAdminクラスに以下のプロパティを設定#サイドバーにフィルタリンクを表示
list_filter = ['pub_date']
#検索ボックスを表示
search_fields = ['question']
#階層バーを表示
date_hierarchy = 'pub_date'