zoukankan      html  css  js  c++  java
  • Django学习day8——admin后台管理和语言适应

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

    1. 创建管理员用户

    (django) E:Djangomysite>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,还有一个放大镜图标,您可以单击以拉出弹出窗口,您可以从中选择要添加的发布者。

  • 相关阅读:
    Mininet系列实验(六):Mininet动态改变转发规则实验
    Mininet系列实验(五):Mininet设置带宽之简单性能测试
    Mininet系列实验(三):Mininet命令延伸实验扩展
    Mininet系列实验(一):Mininet使用源码安装
    集合初始化器概览(Visual Basic)
    为什么开发人员不能估算时间?
    Lambda 表达式 Lambda Expressions (Visual Basic)
    宽松委托转换(Relaxed delegate conversion)
    [翻译]SQL Server 未公开的两个存储过程sp_MSforeachtable 和 sp_MSforeachdb
    Visual Basic 2010 新特性
  • 原文地址:https://www.cnblogs.com/luocodes/p/10704399.html
Copyright © 2011-2022 走看看