Django学习day8——admin后台管理和语言适应

Django最大的优点之一,就是体贴的为你提供了一个基于项目model创建的一个后台管理站点admin。这个界面只给站点管理员使用,并不对大众开放。

1. 创建管理员用户

(django) E:\Django\mysite>python manage.py createsuperuser
Username (leave blank to use 'administrator'): #输入管理员名字
Email address:输入邮箱,可为空#
Password:#密码
Password (again):#再一次输入密码
Superuser created successfully.

创建完成以后开启django服务了,访问http://127.0.0.1:8000/admin/ 出现如下

输入账号密码,你就可以登录django后台了

它仅有两个默认的管理-编辑模块:用户组(Groups)和用户(Users)。

Django设置后台中文面板和时区

Django还有一个很棒的功能,它自带了多种语言的翻译

在settings.py的MIDDLEWARE_CLASSES 下,最后一行添加'django.middleware.locale.LocaleMiddleware',即可显示中文的后台界面

 

除此之外我们还要设置一下时间的同步,在settings.py中修改以下这两个配置

TIME_ZONE = 'Asia/Shanghai'

USE_TZ = False

USE_TZ设置为True时,Django会使用系统默认设置的时区,即America/Chicago,我们要设置为False

TIME_ZONE = 'Asia/Shanghai'即为上海UTC时间

现在我们进入用户下的管理员你会发现时间已经是上海UTC时间了,不会显示相差8小时了

 

将你的Models加入到Admin管理中

打开myapp下的admin.py设置如下

from django.contrib import admin
from myapp.models import Publisher, Author, Book

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

这些代码通知管理工具为这些模块逐一提供界面。

 

刷新一下后台你会发现多了一个app项和一些列表,这些都是你在模型中定义的数据

自定义列表

这个页面应该提供便利,比如说:在这个列表中可以看到作者的邮箱地址。如果能按照姓氏或名字来排序,那就更好了。

为了达到这个目的,我们将为Author模块定义一个ModelAdmin类。 这个类是自定义管理工具的关键,其中最基本的一件事情是允许你指定列表中的字段。 打开admin.py并修改:

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('email','first_name', 'last_name')

admin.site.register(Publisher)
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book)

解释一下代码:

我们新建了一个类AuthorAdmin,它是从django.contrib.admin.ModelAdmin派生出来的子类,保存着一个类的自定义配置,以供管理工具使用。 我们只自定义了一项:list_display, 它是一个字段名称的元组,用于列表显示。 当然,这些字段名称必须是模块中有的。

我们修改了admin.site.register()调用,在Author后面添加了AuthorAdmin。你可以这样理解: 用AuthorAdmin选项注册Author模块。

admin.site.register()函数接受一个ModelAdmin子类作为第二个参数。 如果你忽略第二个参数,Django将使用默认的选项。PublisherBook的注册就属于这种情况。

这时你发现在每个列上都可以点击进行排序了

 

快速查询栏

AuthorAdmin追加search_fields,如:

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('email','first_name', 'last_name')
    search_fields = ('first_name', 'last_name')#追加的

这时的anthor出现了一个搜索框,可以搜索匹配的 first_name 和 last_name信息

过滤器

Django为日期型字段提供了快捷过滤方式,它包含:今天、过往七天、当月和今年。这些是开发人员经常用到的。

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)#这里要以元组添加,不能去掉末尾的的逗号,否则报错

 过滤器如下图显示:

另外一种过滤日期的方式是使用date_hierarchy选项,如:

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'

效果如下:

修改好后,页面中的列表顶端会有一个逐层深入的导航条, 它从可用的年份开始,然后逐层细分到月乃至日。

 

改变默认的排序方式

例如按publication date降序排列:

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)

效果如下:(右上角多了一个小箭头显示排序)

 

自定义编辑表单

更改编辑顺序

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    fields = ('publisher', 'title', 'authors', 'publication_date')#这里我们更换了编辑表单的顺序

效果如下:

 

隐藏编辑字段

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    fields = ('publisher', 'title', 'authors')#这里少了publication_date字段,我们将不会在表单编辑中看到

效果如下:

因为我们在模型中设置了null=True,所以Django会将publication_date设置为None,以确保这个字段满足null=True的条件。

 

表单多选框过滤器

管理站点将每个ManyToManyField表示为多选框,这是最合乎逻辑的HTML输入小部件,但多选框可能很难使用。

我们使用filter_horizontal解决这个问题:

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    fields = ('title','publisher',  'authors')
    filter_horizontal = ('authors',)#需要填入一个元组,注意最后要逗号

效果如下:

你会看到Authors中有一个精巧的JavaScript过滤器,它允许你检索选项,然后将选中的authors从Available框移到Chosen框,还可以移回来。

ModelAdmin类还支持filter_vertical选项。 它像filter_horizontal那样工作,除了控件都是垂直排列,而不是水平排列的。 至于使用哪个,只是个人喜好问题。

filter_vertical效果图:

filter_horizontal 和 filter_vertical选项只能用在多对多字段 上, 而不能用于 ForeignKey字段。

下拉框改为文本框

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    fields = ('title','publisher',  'authors')
    filter_vertical = ('authors',)
    raw_id_fields = ('publisher',)#将publisher外键的下拉框改为文本框

效果如下:

你在这个输入框里输入什么? 发布者的数据库ID。 鉴于人类通常不会记住数据库ID,还有一个放大镜图标,您可以单击以拉出弹出窗口,您可以从中选择要添加的发布者。

 

posted @ 2019-04-14 14:57  LuoSpider  阅读(530)  评论(0编辑  收藏  举报