Django之 admin组件

本节内容

 

  • 路由系统
  • models模型
  • admin 
  • views视图
  • template模板

 

Django Admin介绍

admin 是django 自带的用来让你进行数据库管理的web app. 
提供了很多定制化功能,你甚至可以用它来进行公司内部的内容管理

 

启用admin

你用startproject命令创建项目时django admin就默认启用了

For reference, here are the requirements:

  1. Add 'django.contrib.admin' to your INSTALLED_APPS setting.
  2. The admin has four dependencies - django.contrib.auth, django.contrib.contenttypes, django.contrib.messages and django.contrib.sessions. If these applications are not in your INSTALLED_APPS list, add them.
  3. Add django.contrib.auth.context_processors.auth and django.contrib.messages.context_processors.messages to the 'context_processors' option of the DjangoTemplates backend defined in your TEMPLATES as well as django.contrib.auth.middleware.AuthenticationMiddleware and django.contrib.messages.middleware.MessageMiddleware to MIDDLEWARE. These are all active by default, so you only need to do this if you’ve manually tweaked the settings.
  4. Determine which of your application’s models should be editable in the admin interface.

admin 访问地址

http://localhost:yourport/admin/, by default.

为什么会让登录?哪来的用户信息?django自带了一套用户认证系统,admin就用了这个, 所以你想登录,先创建管理员账号。

1
python manage.py createsuperuser

 

然后你就开心的登录进去了呀

发现只有这么个东西, 什么东东?

这就是django自带的用户认证系统的2张表,用于管理账户和账户组信息。

那接下来要干什么呢? 注意django admin的作用是让你管理各app下的数据库表,实现可以通过Web页面就完成对数据的增删改查噢。 admin不会没事闲的自己把你创建的表拿过来管理,你得把你写的表在admin里注册一下才行。 

在每个app下有个admin.py文件 ,在那里面注册你想要被管理的表

1
2
3
4
5
6
7
8
9
from  django.contrib  import  admin
 
# Register your models here.
 
from  app01  import  models
 
 
admin.site.register(models.Article)
admin.site.register(models.Account)

 

然后刷新下页面,新添加的2个表就出来了  

admin定制

你可以定义每张表显示哪些字段、对某些字段进行过滤、允许搜索等功能,这就需要定制一下admin的类了

1
2
3
4
class  ArticleAdmin(admin.ModelAdmin):
     list_display  =  ( 'title' , 'pub_date' , 'account' , 'read_count' )
     
admin.site.register(Article, ArticleAdmin)

一下子就好看了,真是神奇呀。

就喜欢你这没见识的样子,别急,还有很多nb的功能呢,一起来看下。

看来这个list_display就是定义表数据要展示哪些字段的,除了这个属性,admin 还提供了哪些其它功能呢?

 

fields 决定对表进行修改时展示哪些字段
1
2
3
class  ArticleAdmin(admin.ModelAdmin):
     list_display  =  ( 'title' , 'pub_date' , 'account' , 'read_count' )
     fields  =  [ 'title' , 'account' , 'pub_date' ]

 

还可以多个字段显示在一行。

1
fields  =  [ 'title' , 'account' ,( 'pub_date' , 'read_count' )]

 

exclude 不展示哪些字段  

date_hierarchy = 'pub_date'  按日期分类显示数据  

You can also specify a field on a related model using the __ lookup, for example:
date_hierarchy = 'author__pub_date'

fieldsets 分组显示
1
2
3
4
5
6
7
8
9
10
11
class  ArticleAdmin(admin.ModelAdmin):
     list_display  =  ( 'title' , 'pub_date' , 'account' , 'read_count' )
     date_hierarchy  =  'pub_date'
 
     fieldsets  =  (( '文章相关' ,{
         'fields' :( 'title' , 'content' ),
         'classes' : ( 'wide' 'extrapretty' ),
     }),( '高级' ,{
         'classes' :( 'collapse' ,),
         'fields' :(( 'account' , 'read_count' ), 'pub_date' )
     }))

上面的classes 是用于设定字段样式,2个默认自带的样式是collapse 和wide

filter_horizontal,filter_vertical 均用于多对多字段 
1
filter_horizontal  =  [ 'tags' ,]
 
list_display  定义表数据显示哪些列

除了表中有的字段,models自己定义的字段也能放入list_display

1
2
3
4
5
6
7
8
9
10
11
12
13
from  django.db  import  models
from  django.contrib  import  admin
 
class  Person(models.Model):
     name  =  models.CharField(max_length = 50 )
     birthday  =  models.DateField()
 
     def  decade_born_in( self ):
         return  self .birthday.strftime( '%Y' )[: 3 +  "0's"
     decade_born_in.short_description  =  'Birth decade'
 
class  PersonAdmin(admin.ModelAdmin):
     list_display  =  ( 'name' 'decade_born_in' )

甚至还能玩出花样  

from django.utils.html import format_html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<br> class  Tag(models.Model):
     """文章标签表"""
     name  =  models.CharField(max_length = 64 ,unique = True )
     date  =  models.DateTimeField(auto_now_add = True )
     color_code  =  models.CharField(max_length = 6 )
 
     def  colored_name( self ):
         return  format_html(
             '<span style="color: #{};">{}</span>' ,
             self .color_code,
             self .name,
         )
 
     def  __str__( self ):
         return  self .name
1
2
class  TagAdmin(admin.ModelAdmin):
     list_display  =  [ 'name' , 'colored_name' ]

竟然出现了样式,神奇。

  

list_display_links = ('first_name', 'last_name') 点下这2个字段就跳到修改页
list_filter 过滤,把要过滤的字段放到对应列表里就可以
1
list_filter  =  ( 'register_date' ,)

  

list_per_page = 20 每页显示20条数据

  

radio_fields 把外键或choice字段由下拉框变成单选框
1
2
3
4
5
class  ArticleAdmin(admin.ModelAdmin):
     list_display  =  ( 'title' , 'pub_date' , 'account' , 'read_count' )
     date_hierarchy  =  'pub_date'
     filter_horizontal  =  [ 'tags' ,]
     radio_fields  =  { 'account' : admin.VERTICAL}

 

 

自动补全

autocomplete_fields = ['account',] 自动补全,外键查询数据多时,方便查找  

 

raw_id_fields  言语无法表示的字段

就把外键变成这样子

 

readonly_fields = ('address_report',)  只读字段
search_fields  模糊查找
1
search_fields  =  [ 'account__username' , 'title' ]

 

  

好啦,就先讲这些吧, 当然admin还有很多更高级的功能,不过先会这些就够了,以后会深入再讲的。  

转载于:https://www.cnblogs.com/shuai1991/p/11186942.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值