《Django By Example》百人计划django

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
上一篇 下一篇

猜你喜欢

热点阅读