使用Django的管理模块,需要按照如下步骤操作:
在settings.py中设置语言和时区:
LANGUAGE_CODE = 'zh-hans' # 使用中国语言
TIME_ZONE = 'Asia/Shanghai' # 使用中国上海时间
创建管理员的命令如下,按提示输入用户名、邮箱、密码。
python manage.py createsuperuser
http://127.0.0.1:8000/admin/
登录成功后界面如下,但是并没有我们自己应用模型的入口,接下来进行第三步操作。
登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行增删改查操作。
打开booktest/admin.py文件,编写如下代码:
from django.contrib import admin
from booktest.models import BookInfo,HeroInfo
admin.site.register(BookInfo)
admin.site.register(HeroInfo)
到浏览器中刷新页面,可以看到模型类BookInfo和HeroInfo的管理了。
点击类名称"BookInfo"可以进入列表页,默认只有一列。
在列表页中点击"增加"可以进入增加页,Django会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页。
在列表页中点击某行的第一列可以进入修改页。
按照提示进行内容的修改,修改成功后进入列表页。在修改页点击“删除”可以删除一项。
删除:在列表页勾选想要删除的复选框,可以删除多项。
点击执行后进入确认页面,删除后回来列表页面。
数据都删除了,接下来手动造一些数据出来。
Django提供的Admin站点的展示效果可以通过自定义ModelAdmin类来进行控制。
定义管理类需要继承自admin.ModelAdmin类,如下
from django.contrib import admin
class BookInfoAdmin(admin.ModelAdmin):
pass
使用管理类有两种方式:
admin.site.register(BookInfo,BookInfoAdmin)
@admin.register(BookInfo)
class BookInfoAdmin(admin.ModelAdmin):
pass
每页中显示多少条数据,默认为每页显示100条数据,属性如下:
list_per_page=100
class AreaAdmin(admin.ModelAdmin):
list_per_page = 10
顶部显示的属性,设置为True在顶部显示,设置为False不在顶部显示,默认为True。
actions_on_top=True
底部显示的属性,设置为True在底部显示,设置为False不在底部显示,默认为False。
actions_on_bottom=False
class AreaAdmin(admin.ModelAdmin):
...
actions_on_top = True
actions_on_bottom = True
列可以是模型字段,还可以是模型方法,要求方法有返回值。
class AreaInfo(models.Model):
...
def title(self):
return self.atitle
class AreaAdmin(admin.ModelAdmin):
...
list_display = ['id','atitle','title']
admin_order_field=模型类字段
class AreaInfo(models.Model):
...
def title(self):
return self.atitle
title.admin_order_field='atitle'
short_description=‘列标题’
class AreaInfo(models.Model):
...
title.short_description='区域名称'
2)在浏览器中刷新效果如下图:
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='父级区域名称'
class AreaAdmin(admin.ModelAdmin):
...
list_display = ['id','atitle','title','parent']
搜索框
属性如下,用于对指定字段的值进行搜索,支持模糊查询。列表类型,表示在这些字段上进行搜索。
search_fields=[]
class AreaAdmin(admin.ModelAdmin):
...
search_fields=['atitle']
class AreaInfo(models.Model):
atitle=models.CharField('标题',max_length=30)#名称
...
属性如下:
fields=[]
class AreaAdmin(admin.ModelAdmin):
...
fields=['aParent','atitle']
1)打开booktest/models.py文件,修改AreaInfo类,添加str方法。
class AreaInfo(models.Model):
...
def __str__(self):
return self.atitle
属性如下:
fieldset=(
('组1标题',{'fields':('字段1','字段2')}),
('组2标题',{'fields':('字段3','字段4')}),
)
class AreaAdmin(admin.ModelAdmin):
...
# fields=['aParent','atitle']
fieldsets = (
('基本', {'fields': ['atitle']}),
('高级', {'fields': ['aParent']})
)
说明:fields与fieldsets两者选一使用。
在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种。 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。子类TabularInline:以表格的形式嵌入。子类StackedInline:以块的形式嵌入。
class AreaStackedInline(admin.StackedInline):
model = AreaInfo#关联子对象
extra = 2#额外编辑2个子对象
class AreaAdmin(admin.ModelAdmin):
...
inlines = [AreaStackedInline]
可以用表格的形式嵌入。
class AreaTabularInline(admin.TabularInline):
model = AreaInfo#关联子对象
extra = 2#额外编辑2个子对象
class AreaAdmin(admin.ModelAdmin):
...
inlines = [AreaTabularInline]
/home/python/.virtualenvs/py_django/lib/python3.5/site-packages/django/contrib/admin/templates/admin
编辑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 %}