定義
內容發佈的部分由網站的管理員負責查看、添加、修改、刪除數據,開發這些重複的功能是一件單調乏味、缺乏創造力的工作,爲此,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)