Admin站点
开启:python manage.py createsuperuser
按提示填写用户名邮箱 密码
在应用的admin.py中注册模型类
例: 打开booktest/admin.py文件注册地区模型
from django .contrib import admin
from models import *
admin.site.register(AreaInfo)
输入:http://127.0.0.1:8000/admin/
按提示填写用户名密码
登陆成功后可以看到Arealngos 可以进行增加修改 删除 查询
控制管理页展示
类modeladmin可以控制模型界面的展示(列表页、添加修改页的展示方式)
在booktest/admin.py中,注册模型类前定义管理类AreaAdmin
Class AreaAdmin(admin.ModelAdmin):
Pass
管理类有两种使用方式(1注册参数2装饰器)
注册参数:打开booktest/admin.py文件
代码: admin.site.register()
装饰器:打开booktest/admin.py文件 在管理器上注册模型类
代码:@admin.register(AreaInfo)
Class AreaAdmin(admin.ModelAdmin):
Pass
列表页选项
页大小
每页显示多少条数据 默认100
打开booktest/admin.py文件 修改AreaAdmin类 (每页显示10条)
classAreaAdmin(admin.ModelAdmin):
list_per_page= 10
“操作选项”的位置
顶部显示的属性,设置为True(默认)在顶部显示,设置为False不在顶部显示
actions_on_top=True
底部显示的属性,设置为True在底部显示,设置为False(默认)不在底部显示
actions_on_bottom=False
打开booktest/admin.py文件,修改AreaAdmin类如下
classAreaAdmin(admin.ModelAdmin):
actions_on_top =True actions_on_bottom = True
列表中的列
属性如下
list_display=[模型字段1,模型字段2,...]
打开booktest/admin.py文件,修改AreaAdmin类如下
classAreaAdmin(admin.ModelAdmin):
...
list_display = ['id','atitle']
列标题
列标题默认为属性或方法的名称,可以通过属性设置
需要先将模型字段封装成方法,再对方法使用这个属性,
模型字段不能直接使用这个属性
short_description='列标题'
打开booktest/models.py文件,修改AreaInfo类如下
classAreaInfo(models.Model):
...
title.short_description='区域名称'
关联对象
无法直接访问关联对象的属性或方法,可以在模型类中封装方法,访问关联对象的成员
打开booktest/models.py文件,修改AreaInfo类如下
classAreaInfo(models.Model):
...
def parent(self):
return self.aParent.atitle
parent.short_description='父级区域名称'
打开booktest/admin.py文件,修改AreaAdmin类如下
classAreaAdmin(admin.ModelAdmin):
...
list_display =['id','atitle','title','parent']
搜索框
属性如下,用于对指定字段的值进行搜索,支持模糊查询
search_fields=[]
列表类型,表示在这些字段上进行搜索
打开booktest/admin.py文件,修改AreaAdmin类如下
classAreaAdmin(admin.ModelAdmin):
search_fields=['atitle']
中文标题
打开booktest/models.py文件,修改模型类,为属性指定verbose_name参数,即第一个参数
classAreaInfo(models.Model):
atitle=models.CharField('标题',max_length=30)#名称
显示字段顺序
打开booktest/admin.py文件,修改AreaAdmin类如下
classAreaAdmin(admin.ModelAdmin):
fields=['aParent','atitle']
在下拉列表中输出的是对象的名称,可以在模型类中定义str方法用于对象转换字符串
打开booktest/models.py文件,修改AreaInfo类,添加str方法
classAreaInfo(models.Model):
def __str__(self):
return self.atitle.encode('utf-8')
分组显示
属性如下
fieldset=(
('组1标题',{'fields':('字段1','字段2')}),
('组2标题',{'fields':('字段3','字段4')}), )
打开booktest/admin.py文件,修改AreaAdmin类如下
classAreaAdmin(admin.ModelAdmin):
# fields=['aParent','atitle']
fieldsets = (
('基本', {'fields':['atitle']}),
('高级', {'fields':['aParent']}) )
注意: fields 与fieldsets两者选一使用
关联对象
在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种
类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑
子类TabularInline:以表格的形式嵌入
子类StackedInline:以块的形式嵌入
打开booktest/admin.py文件,创建AreaStackedInline类
classAreaStackedInline(admin.StackedInline):
model = AreaInfo#关联子对象
extra = 2#额外编辑2个子对象
打开booktest/admin.py文件,修改AreaAdmin类如下
classAreaAdmin(admin.ModelAdmin):
...
inlines = [AreaStackedInline]
可以用表格的形式嵌入
打开booktest/admin.py文件,创建AreaTabularInline类
classAreaTabularInline(admin.TabularInline):
model = AreaInfo#关联子对象
extra = 2#额外编辑2个子对象
打开booktest/admin.py文件,修改AreaAdmin类如下
classAreaAdmin(admin.ModelAdmin):
...
inlines = [AreaTabularInline]