Django常用[Admin站點(diǎn)]

內(nèi)容發(fā)布的部分由網(wǎng)站的管理員負(fù)責(zé)查看、添加、修改、刪除數(shù)據(jù),開發(fā)這些重復(fù)的功能是一件單調(diào)乏味、缺乏創(chuàng)造力的工作,為此,Django能夠根據(jù)定義的模型類自動(dòng)地生成管理模塊。

在第一部分對(duì)管理站點(diǎn)做了簡單介紹,現(xiàn)在做詳細(xì)講解。在Django項(xiàng)目中默認(rèn)啟用Admin管理站點(diǎn)。

1)準(zhǔn)備工作:創(chuàng)建管理員的用戶名和密碼。

python manage.py createsuperuser

  • 按提示填寫用戶名、郵箱、密碼。
2)使用:在應(yīng)用的admin.py中注冊(cè)模型類
  • 例:打開booktest/admin.py文件,注冊(cè)地區(qū)模型。
from django.contrib import admin
from booktest.models import *

admin.site.register(AreaInfo)
3)進(jìn)入如下網(wǎng)址:

http://127.0.0.1:8000/admin/

  • 按提示填寫用戶名、密碼,點(diǎn)擊“Log in”按鈕登錄。
  • 登錄成功后,可以看到AreaInfos,可以進(jìn)行增加、修改、刪除、查詢的管理。


控制管理頁展示

類ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表頁的展示方式、添加修改頁的展示方式。

1)在booktest/admin.py中,注冊(cè)模型類前定義管理類AreaAdmin。
class AreaAdmin(admin.ModelAdmin):
    pass
  • 管理類有兩種使用方式:
    • ( 1 ) 注冊(cè)參數(shù)
    • ( 2 ) 裝飾器

注冊(cè)參數(shù):

打開booktest/admin.py文件,注冊(cè)模型類代碼如下:

 admin.site.register(AreaInfo,AreaAdmin)

裝飾器:

打開booktest/admin.py文件,在管理類上注冊(cè)模型類,代碼如下:

 @admin.register(AreaInfo)
 class AreaAdmin(admin.ModelAdmin):
     pass

接下來介紹如何控制列表頁、增加修改頁展示效果。



列表頁選項(xiàng)

頁大小

每頁中顯示多少條數(shù)據(jù),默認(rèn)為每頁顯示100條數(shù)據(jù),屬性如下:

list_per_page=100

1)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    list_per_page = 10
2)在瀏覽器中查看區(qū)域信息的列表頁面


"操作選項(xiàng)"的位置

頂部顯示的屬性,設(shè)置為True在頂部顯示,設(shè)置為False不在頂部顯示,默認(rèn)為True。
 actions_on_top=True
底部顯示的屬性,設(shè)置為True在底部顯示,設(shè)置為False不在底部顯示,默認(rèn)為False。
 actions_on_bottom=False
1)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    actions_on_top = True
    actions_on_bottom = True
2)在瀏覽器中刷新效果



列表中的列屬性如下:

list_display=[模型字段1,模型字段2,...]

1)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = ['id','atitle']
2)在瀏覽器中刷新效果
  • 點(diǎn)擊列頭可以進(jìn)行升序或降序排列。


將方法作為列

列可以是模型字段,還可以是模型方法,要求方法有返回值

1)打開booktest/models.py文件,修改AreaInfo類如下:
class AreaInfo(models.Model):
    ...
    def title(self):
        return self.atitle
2)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = ['id','atitle','title']
3)在瀏覽器中刷新效果

方法列是不能排序的,如果需要排序需要為方法指定排序依據(jù)。

admin_order_field=模型類字段
1)打開booktest/models.py文件,修改AreaInfo類如下:
class AreaInfo(models.Model):
    ...
    def title(self):
    return self.atitle
    title.admin_order_field='atitle'
2)在瀏覽器中刷新效果


列標(biāo)題

  • 列標(biāo)題默認(rèn)為屬性或方法的名稱,可以通過屬性設(shè)置。需要先將模型字段封裝成方法,再對(duì)方法使用這個(gè)屬性,模型字段不能直接使用這個(gè)屬性。
    short_description='列標(biāo)題'
1)打開booktest/models.py文件,修改AreaInfo類如下:
class AreaInfo(models.Model):
    ...
    title.short_description='區(qū)域名稱'
2)在瀏覽器中刷新效果

關(guān)聯(lián)對(duì)象

  • 無法直接訪問關(guān)聯(lián)對(duì)象的屬性或方法,可以在模型類中封裝方法,訪問關(guān)聯(lián)對(duì)象的成員。
1)打開booktest/models.py文件,修改AreaInfo類如下:
class AreaInfo(models.Model):
    ...
    def parent(self):
        if self.aParent is None:
            return ''
        return self.aParent.atitle
    parent.short_description='父級(jí)區(qū)域名稱'
2)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = ['id','atitle','title','parent']


右側(cè)欄過濾器

屬性如下,只能接收字段,會(huì)將對(duì)應(yīng)字段的值列出來,用于快速過濾。一般用于有重復(fù)值的字段。
list_filter=[]

1)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    list_filter=['atitle']
2)在瀏覽器中刷新效果


1)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    list_filter=['atitle']
2)在瀏覽器中刷新效果


搜索框

屬性如下,用于對(duì)指定字段的值進(jìn)行搜索,支持模糊查詢。列表類型,表示在這些字段上進(jìn)行搜索。

search_fields=[]
1)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    search_fields=['atitle']
2)在瀏覽器中刷新效果如下圖:


中文標(biāo)題

1)打開booktest/models.py文件,修改模型類,為屬性指定verbose_name參數(shù),即第一個(gè)參數(shù)。
class AreaInfo(models.Model):
    atitle=models.CharField('標(biāo)題',max_length=30)#名稱
    ...
2)在瀏覽器中刷新效果


編輯頁選項(xiàng)

顯示字段順序

屬性如下:

fields=[]
1)點(diǎn)擊某行ID的鏈接,可以轉(zhuǎn)到修改頁面,默認(rèn)效果
2)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    fields=['aParent','atitle']
3)刷新瀏覽器效果


在下拉列表中輸出的是對(duì)象的名稱,可以在模型類中定義str方法用于對(duì)象轉(zhuǎn)換字符串。
1)打開booktest/models.py文件,修改AreaInfo類,添加str方法。
class AreaInfo(models.Model):
    ...
def __str__(self):
    return self.atitle
2)刷新瀏覽器效果


分組顯示

屬性如下:
fieldset=(
    ('組1標(biāo)題',{'fields':('字段1','字段2')}),
    ('組2標(biāo)題',{'fields':('字段3','字段4')}),
)
1)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    # fields=['aParent','atitle']
    fieldsets = (
        ('基本', {'fields': ['atitle']}),
        ('高級(jí)', {'fields': ['aParent']})
    )
2)刷新瀏覽器效果
說明:fields與fieldsets兩者選一使用。



關(guān)聯(lián)對(duì)象

在一對(duì)多的關(guān)系中,可以在一端的編輯頁面中編輯多端的對(duì)象,嵌入多端對(duì)象的方式包括表格、塊兩種。

  • 類型InlineModelAdmin:表示在模型的編輯頁面嵌入關(guān)聯(lián)模型的編輯。
  • 子類TabularInline:以表格的形式嵌入。
  • 子類StackedInline:以塊的形式嵌入。
1)打開booktest/admin.py文件,創(chuàng)建AreaStackedInline類。
class AreaStackedInline(admin.StackedInline):
    model = AreaInfo#關(guān)聯(lián)子對(duì)象
    extra = 2#額外編輯2個(gè)子對(duì)象
2)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaStackedInline]
3)刷新瀏覽器效果


可以用表格的形式嵌入。

1)打開booktest/admin.py文件,創(chuàng)建AreaTabularInline類。
class AreaTabularInline(admin.TabularInline):
    model = AreaInfo#關(guān)聯(lián)子對(duì)象
    extra = 2#額外編輯2個(gè)子對(duì)象
2)打開booktest/admin.py文件,修改AreaAdmin類如下:
class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaTabularInline]
3)刷新瀏覽器效果


重寫模板

1)在templates/目錄下創(chuàng)建admin目錄,結(jié)構(gòu)如下圖:
2)打開當(dāng)前虛擬環(huán)境中Django的目錄,再向下找到admin的模板,目錄如下:
/home/`用戶名`/.virtualenvs/`虛擬環(huán)境名`/lib/python3.5/site-packages/django/contrib/admin/templates/admin
3)將需要更改文件拷貝到第一步建好的目錄里,此處以base_site.html為例。
編輯base_site.html文件:
{% extends "admin/base.html" %}
{% block title %}
    {{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
<h1 id="site-name">
    <a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a>
</h1>
<hr>
<h1>自定義的管理頁模板</h1>
<hr>
{% endblock %}
{% block nav-global %}{% endblock %}
4)在瀏覽器中轉(zhuǎn)到列表頁面,刷新
  • 其它后臺(tái)的模板可以按照相同的方式進(jìn)行修改。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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