阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Django 之管理界面

389次阅读
没有评论

共计 5838 个字符,预计需要花费 15 分钟才能阅读完成。

为新增的 books 应用开启管理界面

1、项目 /setting.py 文件的修改

(a) 将 ’django.contrib.admin’ 加入 setting 的 INSTALLED_APPS 配置中(默认已经有。INSTALLED_APPS 中的配置顺序是没有关系的)

 (b). 保证 INSTALLED_APPS 中包

含 ’django.contrib.auth’,’django.contrib.contenttypes’ 和 ’django.contrib.sessions’,

Django 的管理工具需要这 3 个包(默认已经有)。

 

(c). 确保 MIDDLEWARE_CLASSES 包含 ’django.middleware.common.CommonMiddleware’

、’django.contrib.sessions.middleware.SessionMiddleware’

和 ’django.contrib.auth.middleware.AuthenticationMiddleware’(默认也有了)

 

 2、“ book“ 例子中,我们定义了三个模块:Publisher、Author 和 Book。

在 “books“ 目录下(“ mysite/books“),创建一个文件:“ admin.py“,然后输入以下代码:

 

from django.contrib import admin

from .modelsimport Publisher,Author,Book  这里红色字的路径要注意

admin.site.register(Publisher)

admin.site.register(Author)

admin.site.register(Book)

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

管理工具是如何工作的呢? 其实很简单。

当服务启动时,Django 从 “url.py“ 引导 URLconf,然后执行 “admin.autodiscover()“ 语句。这个函数遍历 INSTALLED_APPS 配置,并且寻找相关的 admin.py 文件。如果在指定的 app 目录下找到 admin.py,它就执行其中的代码。

在 “ books“ 应用程序目录下的 “ admin.py“ 文件中,每次调用 “ admin.site.register()“ 都将那个模块注册到管理工具中。管理工具只为那些明确注册了的模块显示一个编辑 / 修改的界面。

应用程序 “ django.contrib.auth“ 包含自身的 “ admin.py“,所以 Users 和 Groups 能在管理工具中自动显示。

其它的 django.contrib 应用程序,如 django.contrib.redirects,其它从网上下在的第三方 Django 应用程序一样,都会自行添加到管理工具。

综上所述,管理工具其实就是一个 Django 应用程序,包含自己的模块、模板、视图和 URLpatterns。你要像添加自己的视图一样,把它添加到 URLconf 里面。你可以在 Django 基本代码中的 django/contrib/admin 目录下,检查它的模板、视图和 URLpatterns,但你不要尝试直接修改其中的任何代码,因为里面有很多地方可以让你自定义管理工具的工作方式。(如果你确实想浏览 Django 管理工具的代码,请谨记它在读取关于模块的

元数据过程中做了些不简单的工作,因此最好花些时间阅读和理解那些代码。)

 

 

管理工具后台的设置

 1、设置字段可选

你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,

你想要某些字段是可选的。举个例子,我们想要 Author 模块中的 email 字段成为可选,即允许不填。在现实世界中,你可能没有为每个作者登记邮箱地址。

为了指定 email 字段为可选,你只要编辑 Book 模块(它在 mysite/books/models.py 文件里),

在 email 字段上加上 blank=True。代码如下:

class Author(models.Model):

first_name = models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(blank=True )

这些代码告诉 Django,作者的邮箱地址允许输入一个空值。所有字段都默认 blank=False,这使得它们不允许输入空值。

2、设置日期型和数字型字段可选

Django 生成 CREATETABLE 语句自动为每个字段显式加上 NOT NULL。但是,其它数据类型有例外:日期型、时间型和数字型字段不接受空字符串。如果你尝试将一个空字符串插入日期型或整数型字段,你可能会得到数据库返回的错误。所以日期型在数据库空值的话应该设置为 NULL,所以 Django 中是这样配置:

class Book(models.Model):

title = models.CharField(max_length=100)

authors = models.ManyToManyField(Author)

publisher = models.ForeignKey(Publisher)

publication_date = models.DateField(blank=True, null=True)

3、自定义字段标签

在编辑页面中,每个字段的标签都是从模块的字段名称生成的。规则很简单:用空格替换下划线;首字母大写。例如:Book 模块中 publication_date 的标签是 Publication date。

然而,字段名称并不总是贴切的。有些情况下,你可能想自定义一个标签。你只需在模块中指定 verbose_name。

举个例子,说明如何将 Author.email 的标签改为 e -mail,中间有个横线。

class Author(models.Model):

first_name =models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(blank=True, verbose_name=’e‐mail’ )

4、自定义 ModelAdmi 类

 在前面我们定义 Author 对象的__unicode__()方法,用以同时显示作者的姓和名。

class Author(models.Model):

first_name =models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(blank=True,verbose_name=’e‐mail’)

def __unicode__(self):

return u’%s %s’ % (self.first_name, self.last_name)

对应后台界面如下:

Django 之管理界面

我们可以在这基础上改进,添加其它字段,从而改变列表的显示。

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

from django.contrib import admin

from mysite.books.models import Publisher,Author, Book

classAuthorAdmin(admin.ModelAdmin):

    list_display = (‘first_name’, ‘last_name’,’email’)

admin.site.register(Publisher)

admin.site.register(Author, AuthorAdmin)

admin.site.register(Book)

修改后效果如下:

Django 之管理界面原理:

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

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

用 AuthorAdmin 选项注册 Author 模块。

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

 

5、在上面的基础增加一个搜索栏

继续修改 books/admin.py

class AuthorAdmin(admin.ModelAdmin):

   list_display = (‘first_name’, ‘last_name’, ’email’)

    search_fields = (‘first_name’, ‘last_name’)

 

Django 之管理界面

6、在 Book 上增加一个过滤器

修改 books/admin.py 添加一个新的类 BookAdmin,使用list_filter(针对元组或列表) 或date_hierarchy(针对字符串)

class BookAdmin(admin.ModelAdmin):

   list_display = (‘title’,’publisher’,’publication_date’)

search_fields =(‘title’,’publisher’)

date_hierarchy = ‘publication_date’

   list_filter =(‘publication_date’,)  注意,因为是针对元组对象,这里如果只有一个属性的话,后面要加,号

    ordering =(‘-publication_date’,) 同样,因为是针对元组对象,这里如果只有一个属性的话,后面要加,号

admin.site.register(Publisher)

admin.site.register(Author,AuthorAdmin)

admin.site.register(Book,BookAdmin)

 

7、自定义编辑表单

以 Books 为例, 用 fields 可以控制要显示或隐藏的内容和顺序

class BookAdmin(admin.ModelAdmin):

      list_display =(‘title’,’publisher’,’publication_date’)

      search_fields = (‘title’,’publisher’)

     list_filter = (‘publication_date’,)

     date_hierarchy = ‘publication_date’

     ordering = (‘-publication_date’,)

     fields = (‘title’,’author’,’publisher’, ‘publication_date’)

Django 之管理界面

 

 

8、多对多的选择框

使用 filter_horizontal 可以实现多对多的选择框,常用于 10 个以上选项

class BookAdmin(admin.ModelAdmin):

     list_display = (‘title’,’publisher’,’publication_date’)

     search_fields = (‘title’,’publisher’)

     list_filter = (‘publication_date’,)

     date_hierarchy = ‘publication_date’

     ordering = (‘-publication_date’,)

     filter_horizontal = (‘authors’,)  如果想垂直排列可以用 filter_vertical= (‘authors’,)

Django 之管理界面

 9、raw_id_fields

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

理工具使用 “ 下拉框 “ 来展现 “ 外键 “ 字段。但是,正如 “ 多对多字段 “ 那样,有时候你不想忍受因装载并显示

这些选项而产生的大量开销。例如,我们的 book 数据库膨胀到拥有数千条 publishers 的记录,以致于 book 的

添加页面装载时间较久,因为它必须把每一个 publishe 都装载并显示在 “ 下拉框 “ 中。

解决这个问题的办法是使用 “ raw_id_fields“ 选项。它是一个包含外键字段名称的元组,它包含的字段将被展

现成 “ 文本框 “,而不再是 “ 下拉框 “。

Django 之管理界面

 

Ubuntu 14.04 下 Django+MySQL 安装部署全过程 http://www.linuxidc.com/Linux/2016-02/128714.htm

Django1.8 返回 json 字符串和接收 post 的 json 字符串内容  http://www.linuxidc.com/Linux/2015-07/120226.htm

如何使用 Docker 组件开发 Django 项目?http://www.linuxidc.com/Linux/2015-07/119961.htm

Ubuntu Server 12.04 安装 Nginx+uWSGI+Django 环境 http://www.linuxidc.com/Linux/2012-05/60639.htm 

Django+Nginx+uWSGI 部署 http://www.linuxidc.com/Linux/2013-02/79862.htm 

Django 实战教程 http://www.linuxidc.com/Linux/2013-09/90277.htm 

Django Python MySQL Linux 开发环境搭建 http://www.linuxidc.com/Linux/2013-09/90638.htm 

Django 的详细介绍:请点这里
Django 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/132820.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5838字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7977157
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...