django自带的admin后台管理,可以实现对数据库表的增删改查,用起来十分方便。其使用和配置主要分为三个步骤:

1,创建超级用户

需要创建超级用户来登陆admin后台系统,在命令行中输入 python manage.py createsuperuser

  

然后根据提示设置用户名和密码(邮箱可不设置,密码至少八位)

2, 注册model表

  在创建的app下的admin.py文件中,需要对创建的model表进行注册

  使用格式如下:

 from django.contrib import admin
import models # Register your models here.
class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish'] admin.site.register(models.Book,admin_class=BookConfig)
admin.site.register(models.Author)
admin.site.register(models.Publish)

  通过admin.site.register()注册后,后台就能显示相应的model表。另外,在Book表注册时设置了admin_class=BookConfig,可以对显示的字段进行自定义,详细设置见下面的ModelAdmin参数介绍

3, 登陆admin后台

  由于在全局的路由中配置了如下的admin后台url,在浏览器输入http://127.0.0.1:8008/admin/,利用设置的超级用户登陆即可。

    urlpatterns = [ url(r'^admin/', admin.site.urls), ]

  

  在settings.py文件中修改LANGUAGE_CODE = 'en-us',设置成LANGUAGE_CODE = 'zh-Hans',能够使界面变成中文(zh-Hans表示简体中文)

  若要显示的model表名为中文,需要在model的meta中定义:verbose_name_plural = '书籍'  (verbose_name定义后django会自动加上s)

  若要models的表的字段显示为中文,需要实现__str__(),并在每个字段中定义verbose_name,设置代码如下

  
 class Book(models.Model):
title = models.CharField(max_length=64,verbose_name='标题')
price = models.DecimalField(max_digits=5,decimal_places=2,default=0)
author = models.ManyToManyField(to='Author')
publish = models.ForeignKey(to='Publish')
def __str__(self):
return self.title
class Meta:
verbose_name_plural = '书籍'
#verbose_name = '书籍' #这样设置后会显示复数形式: 书籍s

models.py


  另外在添加数据时,若添加中文报错:'ascii' codec can't encode characters in position 0-3: ordinal not in range(128) , 需要在manage.py 文件中代码前面加入 reload(sys)和sys.setdefaultencoding('utf8'),如下:

#coding:utf-8
#!/usr/bin/env python
import os
import sys
reload(sys)
sys.setdefaultencoding('utf8')

4, ModelAdmin参数介绍

 在注册admin时,通过继承ModelAdmin,设置相应的字段能够自定义model表在admin后台的显式格式,ModelAdmin源代码中定义的字段如下:
class ModelAdmin(BaseModelAdmin):
"Encapsulates all admin options and functionality for a given model." list_display = ('__str__',)
list_display_links = ()
list_filter = ()
list_select_related = False
list_per_page = 100
list_max_show_all = 200
list_editable = ()
search_fields = ()
date_hierarchy = None
save_as = False
save_as_continue = True
save_on_top = False
paginator = Paginator
preserve_filters = True
inlines = [] # Custom templates (designed to be over-ridden in subclasses)
add_form_template = None
change_form_template = None
change_list_template = None
delete_confirmation_template = None
delete_selected_confirmation_template = None
object_history_template = None # Actions
actions = []
action_form = helpers.ActionForm
actions_on_top = True
actions_on_bottom = False
actions_selection_counter = True
checks_class = ModelAdminChecks

常用参数介绍:(官方文档:https://docs.djangoproject.com/en/2.1/ref/contrib/admin/)

1,list_display = ('__str__',): 设置model表需要显示的字段,未设置时只显示__str__()的返回值。如下面设置了title, price,publish三个字段

class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish']
admin.site.register(models.Book,admin_class=BookConfig) list_display字段除了支持model字段外,还可以加入自定义的函数,如下面代码所示,增加了一列:编辑列,实现点击能进入编辑页面。 (list_display支持三种方式定义的函数,见官方文档)
def edit(model_obj):
return mark_safe('<a href="%s/change/">编辑</a>' % model_obj.pk) class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish',edit]

 

2,list_display_links = (),设置model表具有超链接的字段(默认为__str__()的返回字段),设置后点击能进入编辑页面。如下面的设置,price字段也变成超链接

class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish']
list_display_links = ['title','price']

3,list_filter = (),设置过滤地字段,设置后后台管理右侧会出现过滤器(一般都设置为外键或多对多字段),点击能显示该类别下的数据。如下面设置后,点击右边的文艺出版社,能过滤出文艺出版社出版的所有书籍,如左边所示。

class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish']
list_display_links = ['title','price']
list_filter = ('author','publish')

4,search_fields = (),设置搜索时进行匹配的字段(不能设置为外键或多对多字段),设置后上面会出现搜索框,搜索时会将定义的字段和输入内容进行匹配,筛选出复合条件的数据。如下面的设置为标题字段,通过搜索浪漫能匹配出标题中含浪漫的数据

class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish']
list_display_links = ['title','price']
list_filter = ('author','publish')
search_fields = ('title',)
 

5,actions = [], 设置批处理函数,需要自己定义和实现函数,设置后在action下拉框中会出现设置的相应批处理函数,点击后能进行批处理。下面的设置定义了一个批量修改价格的方法,如下图点击action中的批量修改价格后能将选中的数据的价格修改成24

官方文档:https://docs.djangoproject.com/en/2.1/ref/contrib/admin/actions/

class BookConfig(admin.ModelAdmin):
list_display = ['title','price','publish']
list_display_links = ['title','price']
list_filter = ('author','publish')
search_fields = ('title',) def batch_update_price(self,request,queryset):
queryset.update(price = 24)
# for obj in queryset:
# do_something_with(obj)
batch_update_price.short_description = "批量修改价格为24" #为该函数定义一个显示的名称,可以不设置
actions = (batch_update_price,)

 
 

Django admin site应用的更多相关文章

  1. Django Admin site 显示问题

    Django Admin site 显示问题 今天配置了一下Django admin site,可是admin site的显示有一些问题,当我打开源码.訪问里面的admin 的css 文件时候,htt ...

  2. Django admin site(三)InlineModelAdmin

    InlineModelAdmin class InlineModelAdminclass TabularInlineclass StackedInline 举例,有两个Model: from djan ...

  3. Django admin site(一)ModelAdmin Options

    Admin管理界面是django的杀手级应用.它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即向网站中添加内容. 要使用admin,可以按照下面的步骤: 将'dj ...

  4. django admin site (三)

    1.自定义模板设置: ModelAdmin. add_form_template Path to a custom template, used by add_view(). ModelAdmin. ...

  5. django admin site配置(二)

    1. ModelAdmin.inlines 将有外键的子类包含进视图 ,实例: class Author(models.Model): name = models.CharField(max_leng ...

  6. Django admin site(二)ModelAdmin methods

    ModelAdmin methods save_model(request, obj, form, change) 此方法为admin界面用户保存model实例时的行为.request为HttpReq ...

  7. Django admin 权威指南(一)

    版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...

  8. Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接

    在文章 Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接(一) 中我们成功的为/feedback/feedback_stats/路径自定义了使用tem ...

  9. Django admin定制化,User字段扩展[原创]

    前言 参考上篇博文,我们利用了OneToOneField的方式使用了django自带的user,http://www.cnblogs.com/caseast/p/5909248.html , 但这么用 ...

随机推荐

  1. 前端通过url下载文件方法

    前端通过url下载文件方法 产生背景 浏览器通过url下载文件,当浏览器识别出资深能播放的资源文件,就不会走下载流程,会直接打开 解决方法 1.让后台转成请求的方式,输出文件流(如果想实现批量下载-因 ...

  2. liunx pip安装

    方法一 wget https://bootstrap.pypa.io/get-pip.py python get-pip.py 方法二 wget https://pypi.python.org/pac ...

  3. CentOS自动备份MySql

    1.确认Crontab是否安装 service crond startcrontab -l 2.编写备份脚本 cd mkdir backup cd backup vim auto.sh /usr/bi ...

  4. shell脚本——数组

    连续的变量 解决:变量过多的问题,在同一类变量中,不需要定义多个名字,而是以数组的方式来定义 定义数组: declare -I 定义整数 declare -a 定义数组 declare -A 定义嵌套 ...

  5. 04_Hive的基本命令

    1.Hive基本操作: 1.1.Hive的建表语句: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [ ...

  6. 自定义ViewGroup基础巩固2---onMeasure()学习及综合实现圆形菜单

    上次对自定义ViewGroup中的onLayout()方法进行了基础巩固[http://www.cnblogs.com/webor2006/p/7507284.html],对于熟知自定义ViewGro ...

  7. [NOI2008]假面舞会——数论+dfs找环

    原题戳这里 思路 分三种情况讨论: 1.有环 那显然是对于环长取个\(gcd\) 2.有类环 也就是这种情况 1→2→3→4→5→6→7,1→8→9→7 假设第一条链的长度为\(l_1\),第二条为\ ...

  8. django session 加密cookie型

    a. 配置 settings.py           SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引 ...

  9. Spring boot连接3.03以上的mongodb 权限验证问题

    由于3.0.3,mongodb加入了SCRAM-SHA-1校验方式,需要第三方工具配合进行验证,所有Spring boot连接MongoDB时会出现用户认证失败. 解决方法: > use adm ...

  10. spring @Primary-在spring中的使用(转)

    在spring 中使用注解,常使用@Autowired, 默认是根据类型Type来自动注入的.但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况下 @Primary ...