Django 提供了基于 web 的管理工具
Django 自動管理工具是 django.contrib 的一部分。你可以在項目的 settings.py 中的 INSTALLED_APPS 看到它:
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',)
激活管理工具
urls.py中添加
url(r'^admin/' ,admin.site.urls)
使用管理工具
漢化方式:
setting.py中修改:
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai'
-
登錄http://127.0.0.1:8000/admin/login/?next=/admin/
-
你可以通過命令 python manage.py createsuperuser 來創(chuàng)建超級用戶,如下所示,在pycharm的teminal操作如下:
-
輸入剛才的賬號密碼登錄進來:
為了讓 admin 界面管理某個數(shù)據(jù)模型,我們需要先注冊該數(shù)據(jù)模型到 admin。比如,我們之前在 blog 中已經(jīng)創(chuàng)建了模型 Test 。修改 blog/admin.py(不清楚的看上文中的樹結(jié)構):
from django.contrib import admin from blog.models import Test admin.site.register(Test) #如果有多個model,使用admin.site.register([1,2])然后到teminal哪里刷新一下:
$ python manage.py makemigrations TestModel # 讓 Django 知道我們在我們的模型有一些變更 $ python manage.py migrate TestModel # 創(chuàng)建表結(jié)構-
打開后臺:
自定義表單
我們可以自定義管理頁面,來取代默認的頁面。比如上面的 "add" 頁面。我們想只顯示 name 和 email 部分。修改 blog/admin.py:
from django.contrib import admin
from blog.models import Test,Contact,Tag
class ContactAdmin(admin.ModelAdmin):
fields = ('name','email')
#register
admin.site.register(Contact,ContactAdmin) admin.site.register([Test,Contact,Tag])-
以上代碼定義了一個 ContactAdmin 類,用以說明管理頁面的顯示格式。
里面的 fields 屬性定義了要顯示的字段。
由于該類對應的是 Contact 數(shù)據(jù)模型,我們在注冊的時候,需要將它們一起注冊。顯示效果如下:
我們還可以將輸入欄分塊,每個欄也可以定義自己的格式。修改 blog/admin.py為:
from django.contrib import admin
from blog.models import Test,Contact,Tag
class ContactAdmin(admin.ModelAdmin):
fieldsets = (
[ 'Main',
{'fields':('name','email'), }],
[ 'Advance',
{'classes':('collapse',), #css
'fields':('age',),} ])
admin.site.register(Contact,ContactAdmin)
admin.site.register([Test,Tag])
結(jié)果如下所示:

內(nèi)聯(lián)顯示
上面的 Contact 是 Tag 的外部鍵,所以有外部參考的關系。
而在默認的頁面顯示中,將兩者分離開來,無法體現(xiàn)出兩者的從屬關系。
- 我們可以使用內(nèi)聯(lián)顯示,讓 Tag 附加在 Contact 的編輯頁面上顯示。
修改blog/admin.py:
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
#Register your models here.
class TagInline(admin.TabularInline):
model = Tag
class ContactAdmin(admin.ModelAdmin):
inlines = [TagInline] # Inline
fieldsets = (
['Main',{
'fields':('name','email'),
}],
['Advance',{
'classes': ('collapse',),
'fields': ('age',),
}])
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test])
顯示結(jié)果如下:

- 我們也可以自定義該頁面的顯示,比如在列表中顯示更多的欄目,只需要在 ContactAdmin 中增加 list_display 屬性:
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
#Register your models here.
class TagInline(admin.TabularInline):
model = Tag
class ContactAdmin(admin.ModelAdmin):
list_display = ('name','age', 'email') # list
search_fields = ('name',)
inlines = [TagInline] # Inline
fieldsets = (
['Main',{
'fields':('name','email'),
}],
['Advance',{
'classes': ('collapse',),
'fields': ('age',),
}]
)
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test])
顯示結(jié)果如下:

- 搜索功能在管理大量記錄時非常有,我們可以使用 search_fields 為該列表頁增加搜索欄,修改admin.py:
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
#Register your models here.
class TagInline(admin.TabularInline):
model = Tag
class ContactAdmin(admin.ModelAdmin):
list_display = ('name','age', 'email') # list
search_fields = ('name',)
inlines = [TagInline] # Inline
fieldsets = (
['Main',{
'fields':('name','email'),
}],
['Advance',{
'classes': ('collapse',),
'fields': ('age',),
}]
)
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test])
刷新查看結(jié)果:

-- 本文摘錄自菜鳥教程,家阿入了一些自己的東西,在此特別感謝菜鳥教程!




