django自带的admin后台管理,可以实现对数据库表的增删改查,用起来十分方便。其使用和配置主要分为三个步骤:
1,创建超级用户
需要创建超级用户来登陆admin后台系统,在命令行中输入 python manage.py createsuperuser
然后根据提示设置用户名和密码(邮箱可不设置,密码至少八位)
2, 注册model表
在创建的app下的admin.py文件中,需要对创建的model表进行注册
使用格式如下:

1 from django.contrib import admin 2 import models 3 4 # Register your models here. 5 class BookConfig(admin.ModelAdmin): 6 list_display = ['title','price','publish'] 7 8 9 admin.site.register(models.Book,admin_class=BookConfig) 10 admin.site.register(models.Author) 11 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,设置代码如下

1 class Book(models.Model): 2 title = models.CharField(max_length=64,verbose_name='标题') 3 price = models.DecimalField(max_digits=5,decimal_places=2,default=0) 4 author = models.ManyToManyField(to='Author') 5 publish = models.ForeignKey(to='Publish') 6 def __str__(self): 7 return self.title 8 class Meta: 9 verbose_name_plural = '书籍' 10 #verbose_name = '书籍' #这样设置后会显示复数形式: 书籍s
另外在添加数据时,若添加中文报错:'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,)