zoukankan      html  css  js  c++  java
  • 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,)

     
     
  • 相关阅读:
    Atitit sumdoc t5 final file list \sumdoc t5 final\sumdoc t511 \sumdoc t5 final\sumdoc t511.zip \sum
    上课流程法如何上好第一节课(1) 目录 1. 目录 1 1.1. 销售自己 1 1.2. 销售课程 1 1.3. 学习方法 1 1.4. 制定规章 2 2. 销售自己自我介绍 2 2.1.
    Atitit 重复文件清理工具 按照文件名 目录 1. 原理, 1 1.1. If base filex exist dele other files 1 1.2. Get getStartIdex
    Atitit sumdoc index 2019 v6 t56 .docx Atitit sumdoc index s99 目录 1. Zip ver 1 1.1. C:\Users\Adminis
    Atitit lucence es solr的各种query 与sql运算符的对比 目录 1.1. 等于运算 TermQuery 1 1.2. 范围运算 1 1.3. 大小运算 1 1.4. Wi
    Atitit 程序设计概论 艾提拉著作 目录 1. 界面ui设计 1 2. 编程语言部分 1 3. 面向对象的程序设计 1 4. 算法章节 数据结构 1 5. 第21章 标准库 2 5.1. 文件i
    Atitit 命令行执行sql 跨语言 目录 1.1. 无需输入密码,那就不要p参数即可 1 1.2. 4.使用mysql命令执行 1 1.3. 5.mysql命令执行sql,并将查询结果保存到
    Atitit java播放 wav MIXER 混响器编程 目录 1.1. MIXER 混响器编程 1 1.2. 得到系统中一共有多少个混音器设备: 1 1.3. 接口摘要 1 1.4. 调节音量
    Atitit object 和class的理解 目录 1.1. 发现很多Object的方法都是相同的,他们被重复地放在一个个对象当中,太浪费了。 1 1.2. 那我们怎么把这些Object给创建起来
    Atitit 数据库的历史与未来 目录 1.1. 两个对于数据库强需求的行业。电信 金融 1 1.2. 艾提拉分析 对数据库强需求行业金融 1 2. 数据库历史 2 2.1. ,上个世纪50,6
  • 原文地址:https://www.cnblogs.com/silence-cho/p/9750538.html
Copyright © 2011-2022 走看看