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

Django 之管理界面

158次阅读
没有评论

共计 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、短信等云产品特惠热卖中