Django的自动管理界面,它读取模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以立即使用工作。
django.contrib包
Django自动管理工具是django.contrib的一部分。django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框架就是由众多的包含附加组件的基本代码组成。django.contrib中还有其他可用的特性如用户鉴别系统、支持匿名会话以及用户评注系统。
激活管理界面
第一步:配置
在settings文件中做出:
确定包含下面内容
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
创建管理员
运行服务器,访问站点
修改显示语言
配置文件中,改成zh-hans刷新即可
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
将自定义模块加入管理
在‘books/admin.py’
from django.contrib import admin
# Register your models here.
#这些代码统治管理工具为这些模块注意提供界面
from books.models import Publisher,Author,Book
admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
设置可选字段
比如设置Author的email为可选字段。
email=models.EmailField(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)
def __unicode__(self):
return u'%s %s' %(self.first_name,self.last_name)
设置日期型和数字型字段可选
由于日期型、时间型和数字型不接受空字符串,所以使用NULL来定义空。NULL可以表示未知的、非法的、或其他程序指定的含义。NULL不同于空字符串。如果允许一个日期型或数字型字段为空需要使用null=True,blank=True.然而修改字段的null=True则需要更新到数据库。
class Book(models.Model):
"""关于书籍的类"""
title=models.CharField(max_length=100)
#外键关联作者,多对多
authors=models.ManyToManyField(Author)
#外键关联出版商,一对一
publisher=models.ForeignKey(Publisher)
#出版日期,使用Django中的时间类型字段
publication_date=models.DateField(blank=True,null=True)
更新数据库并将更改的信息记录到补丁文件,然后运行服务查看效果
自定义字段标签
在页面中,每个字段标签都是从模块的字段名称生成的。如果你想自定义标签,只需在模块中指定verbose_name,然后重启服务器。Django会自动适时将字段标签首字母大写。
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')
还可以把它当作固定位置的参数传递
class Author(models.Model):
"""关于作者的类"""
first_name=models.CharField(max_length=30)
last_name=models.CharField(max_length=40)
#数据类型为规定的邮箱的类型
email=models.EmailField('e-mail', blank=True)
但是这种不适合用于指定外键的字段,因为他们的第一个参数必须是模块类。
Django还提供了大量选项让你针对特别的模块自定义管理工具。这些选项都在Model Admin classes 里面。
自定义列表
from django.contrib import admin
# Register your models here.
#这些代码统治管理工具为这些模块注意提供界面
from books.models import Publisher,Author,Book
#admin.ModelAdmin中保存着一个类的自定义配置,以供管理工具使用
class AuthorAdmin(admin.ModelAdmin):
#list_display是一个字段名称元组用于列表显示
list_display = ('first_name','last_name','email')
admin.site.register(Publisher)
#admin.site.register函数接受一个ModelAdmin子类作为第二个参数
#如果你忽略第二个参数,Django将使用默认的选项。
#注册新建的类
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book)
search_fields = ('first_name','last_name')
刷新会在页面上部出现一个搜索框,可以进行名字查询
class BookAdmin(admin.ModelAdmin):
list_display = ('title','publisher','publication_date')
list_filter = ('publication_date',)
admin.site.register(Publisher)
#admin.site.register函数接受一个ModelAdmin子类作为第二个参数
#如果你忽略第二个参数,Django将使用默认的选项。
#注册新建的类
admin.site.register(Author,AuthorAdmin)
admin.site.register(Book,BookAdmin)
另一种过滤器date_hierarchy会在页面中的列表顶端从可用的年份开始然后逐层细分至日期
class BookAdmin(admin.ModelAdmin):
list_display = ('title','publisher','publication_date')
#接受元组
list_filter = ('publication_date',)
#接受字符串
date_hierarchy = 'publication_date'
class BookAdmin(admin.ModelAdmin):
list_display = ('title','publisher','publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
#根据publication_date正序排列
ordering = ('publication_date')
#根据publication_date倒序排列
ordering = ('-publication_date')
自定义编辑表单
class BookAdmin(admin.ModelAdmin):
fields = ('title','publisher','publication_date','authors')
fields也可以设置你不想让别人编辑的表单,只要不将这个字段传入fields即可,如不让别人编辑出版日期
fields = ('title','publisher','authors')
class BookAdmin(admin.ModelAdmin):
filter_horizontal = ('authors',)
class BookAdmin(admin.ModelAdmin):
raw_id_fields = ('publisher',)