Django admin site应用

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)
View Code

   通过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
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,)

 
 
原文地址:https://www.cnblogs.com/silence-cho/p/9750538.html