定义
内容发布的部分由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,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)