Django Admin后臺管理工具

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é)果:

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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容