• 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,)

     
     
  • 相关阅读:
    浅谈数据分析中的“暗物质”
    浅谈数据分析中的“暗物质”
    房屋价格数据采集与分析
    房屋价格数据采集与分析
    基于Python对象引用、可变性和垃圾回收详解
    基于Python对象引用、可变性和垃圾回收详解
    人脸识别中常用的几种分类器
    人脸识别中常用的几种分类器
    解析新零售,互联网大数据时代的到来
    osg::NodeVisitor中计算一个节点对应的世界变换矩阵、法向量、顶点坐标
  • 原文地址:https://www.cnblogs.com/silence-cho/p/9750538.html
Copyright © 2020-2023  润新知