Django中admin後臺管理常用設置系列之十六

定義

內容發佈的部分由網站的管理員負責查看、添加、修改、刪除數據,開發這些重複的功能是一件單調乏味、缺乏創造力的工作,爲此,Django能夠根據定義的模型類自動地生成管理模塊

在Django項目中默認啓用Admin管理站點

  • 創建管理員的用戶名和密碼

    python manage.py createsuperuser

  • 按提示填寫用戶名、郵箱、密碼

模型類代碼

from django.db import models
class AreaInfo(models.Model):
    #地區名,給模型字段設置標題用verbose_name
    atitle = models.CharField(verbose_name='標題', max_length=20) 

    #關係屬性, 自關聯
    aParent = models.ForeignKey('self', null=True, blank=True) 

    # 模型類中封裝方法,訪問關聯對象title的成員
    def title(self):
        return self.atitle.encode('utf-8')
    #指定方法列按照哪個字段來排序,默認不能點擊,設置完後,可以點擊
    title.admin_order_field = 'atitle'
    # 設置title顯示爲'當前地區名稱',注意模型字段不能直接使用這個屬性
    # 模型字段使用verbose_name
    title.short_description = '當前地區名稱'

    #模型類中封裝方法,訪問關聯對象parent的成員
    #返回當前地區父級地區的標題
    def parent(self):
        if self.aParent:
            return self.aParent.atitle.encode('utf-8')
        else:
            return ''
    # 設置parent顯示爲'父級地區名稱',注意模型字段不能直接使用這個屬性
    parent.short_description = '父級地區名稱'

    # 顯示標題內容,不再是AreaInfo object
    def __str__(self):
        return self.atitle.encode('utf-8')

admin管理代碼

class AreaStackedInline(admin.StackedInline):
    model = AreaInfo
    # 控制最後顯示的空白塊,默認3個塊,設置爲2個塊
    extra = 2

class AreaTabularInline(admin.TabularInline):
    model = AreaInfo
    # 控制最後顯示的空白表格,默認3條,設置爲2條
    extra = 2

#自定義模型管理類
#第二種註冊模型類
@admin.register(AreaInfo)
class AreaInfoAdmin(admin.ModelAdmin):
    #每頁顯示10條數據
    list_per_page = 10

    #在底部顯示控制選項
    actions_on_bottom = True 
    #在頂部顯示控制選項
    actions_on_top = False  

    #控制列表頁顯示錶的哪些字段
    list_display = ['id', 'atitle', 'title', 'parent'] 

    #側邊欄過濾框
    list_filter = ['atitle'] 

    #搜索框
    search_fields = ['atitle'] 

    # 以下二者只能選其一
    #fields = ['aParent', 'atitle']
    fieldsets = [
        ('基本', {'fields':['atitle']}),
        ('高級', {'fields':['aParent']})
    ]

    #在一對多的關係中,可以在一端的編輯頁面中編輯多端的對象,嵌入多端對象的方式包括表格、塊兩種
    #類型InlineModelAdmin:表示在模型的編輯頁面嵌入關聯模型的編輯
    #子類TabularInline:以表格的形式嵌入
    #子類StackedInline:以塊的形式嵌入

    # 以塊的形式展示數據
    #inlines = [AreaStackedInline,]
    # 以表格的形式展示數據
    inlines = [AreaTabularInline,]

#第一種註冊模型類
#admin.site.register(AreaInfo, AreaInfoAdmin) 
發佈了176 篇原創文章 · 獲贊 224 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章