2013-10-19

Python初心者がDjangoチュートリアルを触ってみる(Part 2)

今回はAdminサイトの構築。

Djangoはこれが売りらしい。

DBさえ与えてしまえばCRUDできるアプリが自動でできるっていうのはSalesforceに近い感じがする。

 

settting.pyを変更

 

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'

 

 

このエントリーをはてなブックマークに追加