Django-04-Django admin页面
2018-06-22 本文已影响47人
JOooo_
Django自带的后台管理是其特色之一,可以让我们快速便捷管理数据。后台管理可以在各个app的admin.py文件中进行控制。
-----基本设置-----
1. 应用注册
若要把app应用显示在后台管理中,需要在admin.py中注册。接着上几篇的项目,我们在projtrack/admin.py
中注册。
from django.contrib import admin
from .models import Project, Schedule
admin.site.register(Project)
admin.site.register(Schedule)
注册之后就可以在http://127.0.0.1:8000/admin中显示了。
2. admin界面汉化及时区
在项目设置中setting.py中添加:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
-----列表界面设置-----
一般在amdin中注册后,点击进入数据的记录列表页,只会看到一列。如果在模型创建的时候设置过返回的显示名,则会显示名称。
def __str__(self):
return self.project_name
如果需要更多的显示和筛选等功能,需要如下设置。
1. 列表基本设置
首先先更改下应用注册的步骤。添加Project模型管理器,在这里去写一些设置。
# projtrack/admin.py
class ProjectAdmin(admin.ModelAdmin):
list_display=('id', 'project_name')
admin.site.register(Project, ProjectAdmin)
然后在管理器中添加一些列表的基本设置。
# projtrack/admin.py
class ProjectAdmin(admin.ModelAdmin):
# listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键)
list_display = ['id', 'project_name', 'description', 'project_type', 'project_status', 'cre_date']
# list_display_links表示可点击跳转进入详情的字段(默认可以点击每条记录第一个字段的值可以进入编辑界面)
list_display_links = ('id', 'project_name')
# list_editable表示可直接在列表也编辑修改的字段
list_editable = ['description', 'project_type', 'project_status']
# list_per_page设置每页显示多少条记录,默认是100条
list_per_page = 50
# ordering设置默认排序字段,负号表示降序排序
ordering = ('-cre_date',)
...
对应效果如下:
image.png
2. 筛选器
可通过筛选器去在筛选数据显示。主要常用筛选器有3种。在管理器中添加即可。
# projtrack/admin.py
class ProjectAdmin(admin.ModelAdmin):
...
# 筛选器
search_fields = ('project_name',) # 搜索字段
list_filter = ('project_status',) # 过滤器
date_hierarchy = 'cre_date' # 详细时间分层筛选
...
对应效果如下:
image.png
3.添加关联的对象
在我们注册Schedule后,可以看到添加时的表单是这样的: image.png在这个表单中,"Project" 字段是一个包含数据库中所有项目的选择框。Django 知道要将 ForeignKey 在后台中以选择框 <select> 的形式展示。此时,添加后我们只有一个进度。不过,这是一种很低效地添加“进度”的方法。更好的办法是在你创建“项目”对象时可以直接添加好几个进度。现在,像如下这样添加代码。
# projtrack/admin.py
class ScheduleInline(admin.StackedInline):
# fields决定显示哪些字段
fields = ['stage', 'schedule_text', 'status', 'notes']
model = Schedule
# extra决定显示几条
extra = 3
class ProjectAdmin(admin.ModelAdmin):
...
inlines = [ScheduleInline]
...
这会告诉 Django:“Schedule 对象要在 Project 后台页面编辑。默认提供 3 个足够的选项字段。” 现在再次进入添加项目页面,对应效果如下:
image.png
它看起来像这样:有三个关联的选项插槽。不过它占据了大量的屏幕区域来显示所有关联的 Schedule 对象的字段。对于这个问题,Django 提供了一种表格式的单行显示关联对象的方法。你只需按如下形式修改 ScheduleInline 申明:
# projtrack/admin.py
class ScheduleInline(admin.TabularInline):
...
通过 TabularInline(替代 StackedInline ),关联对象以一种表格式的方式展示,显得更加紧凑:
image.png