Django初級手冊2-管理介面的使用及定製

Solon Tan發表於2014-02-27

管理介面的使用

管理介面的URL,帳號和密碼在第一次輸入syncdb時建立

 http://127.0.0.1:8000/admin/

將app加入管理介面

編輯polls/admin.py

from django.contrib import admin
from polls.models import Poll

admin.site.register(Poll)

定製管理表格

#改變順序
from django.contrib import admin
from polls.models import Poll

class PollAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question']

admin.site.register(Poll, PollAdmin)
#新增域框,classes的值collapse表示預設緊縮
class PollAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]

新增關聯物件

再新增poll的時候新增choice,而不是將choice做為單獨一項進行新增
TabularInline和StackedInline對應,是做為表格的緊緻表現形式。

from django.contrib import admin
from polls.models import Choice, Poll

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)

自定義管理員變更列表

不僅能顯示列,還能顯示成員函式的值,但是成員函式的值是無法排序的。

class PollAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question', 'pub_date', 'was_published_recently')

如下可設定成員函式的顯示名稱,以及按哪一可排序屬性排序

class Poll(models.Model):
    # ...
    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?'

新增過濾與搜尋功能

list_filter = ['pub_date']
search_fields = ['question']

定製專案、管理主頁模版

專案、應用模版的位置可在settings中做相應設定。

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]

預設的模版檔案位於django的庫目錄(django/contrib/admin/templates),可用如下命令查詢django的目錄。

python -c "
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)"

專案的預設模版為admin/base_site.html,主頁的模版為admin/index.html,複製到自己的模版目錄後修改即可。

相關文章