• Django——admin


    1 admin组件的使用

    Django 提供了基于 web 的管理工具。

    Django 自动管理工具是 django.contrib 的一部分。你可以在项目的 settings.py 中的 INSTALLED_APPS 看到它:

    # Application definition
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        "app01"
    ]

    1. 激活管理工具

    通常我们在生成项目时会在 urls.py 中自动设置好,

    from django.conf.urls import url
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
    
    ]

    当这一切都配置好后,Django 管理工具就可以运行了。

    2.使用管理工具

    启动开发服务器,然后在浏览器中访问 http://127.0.0.1:8000/admin/, 得到登陆界面,你可以通过命令 python manage.py createsuperuser 来创建超级用户。

    为了让 admin 界面管理某个数据模型,我们需要先注册该数据模型到 admin

    from django.db import models
    
    # Create your models here.
    
    class Author(models.Model):
    
        name=models.CharField( max_length=32)
        age=models.IntegerField()
    
        def __str__(self):
            return self.name
    
    class Publish(models.Model):
    
        name=models.CharField( max_length=32)
        email=models.EmailField()
    
        def __str__(self):
            return self.name
    
    class Book(models.Model):
    
        title = models.CharField( max_length=32)
        publishDate=models.DateField()
        price=models.DecimalField(max_digits=5,decimal_places=2)
    
        publisher=models.ForeignKey(to="Publish")
        authors=models.ManyToManyField(to='Author')
    
        def __str__(self):
            return self.title
    View Code

    3.admin界面汉化

    默认admin后台管理界面是英文的,对英语盲来说用起来不方便。可以在settings.py中设置:

    1. LANGUAGE_CODE = 'zh-CN'
    2. TIME_ZONE = 'Asia/Shanghai'

    1.8版本之后的language code设置不同:

    1. LANGUAGE_CODE = 'zh-hans'
    2. TIME_ZONE = 'Asia/Shanghai'

    二、记录列表界面设置

    记录列表是我们打开后台管理进入到某个应用看到的界面,如下所示:

    我们可以对该界面进行设置,主要包括列表和筛选器。

    1、记录列表基本设置

    比较实用的记录列表设置有显示字段、每页记录数和排序等。

    from django.contrib import admin
    from blog.models import Blog
      
    #Blog模型的管理器
    @admin.register(Blog)
    class BlogAdmin(admin.ModelAdmin):
        #listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键)
        list_display = ('id', 'caption', 'author', 'publish_time')
        
        #list_per_page设置每页显示多少条记录,默认是100条
        list_per_page = 50
        
        #ordering设置默认排序字段,负号表示降序排序
        ordering = ('-publish_time',)
      
        #list_editable 设置默认可编辑字段
        list_editable = ['machine_room_id', 'temperature']
      
        #fk_fields 设置显示外键字段
         fk_fields = ('machine_room_id',)
    View Code

    另外,默认可以点击每条记录第一个字段的值可以进入编辑界面。 

    我们可以设置其他字段也可以点击链接进入编辑界面。

    from django.contrib import admin
    from blog.models import Blog
      
    #Blog模型的管理器
    @admin.register(Blog)
    class BlogAdmin(admin.ModelAdmin):   
        #设置哪些字段可以点击进入编辑界面
        list_display_links = ('id', 'caption')

    2、筛选器

    筛选器是Django后台管理重要的功能之一,而且Django为我们提供了一些实用的筛选器。

    主要常用筛选器有下面3个:‘

    from django.contrib import admin
    from blog.models import Blog
      
    #Blog模型的管理器
    @admin.register(Blog)
    class BlogAdmin(admin.ModelAdmin):
        list_display = ('id', 'caption', 'author', 'publish_time')
         
        #筛选器
        list_filter =('trouble', 'go_time', 'act_man__user_name', 'machine_room_id__machine_room_name') #过滤器
        search_fields =('server', 'net', 'mark') #搜索字段
        date_hierarchy = 'go_time'    # 详细时间分层筛选 

    对应效果如下:

     此处注意:

    使用  date_hierarchy  进行详细时间筛选的时候 可能出现报错:Database returned an invalid datetime value. Are time zone definitions for your database and pytz installed?

    处理方法:  

    命令行直接执行此命令:     [root@mysql ~]#    mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
    然后重启数据库即可。
     定制admin
    在admin.py中只需要讲Mode中的某个类注册,即可在Admin中实现增删改查的功能,如:
    admin.site.register(models.UserInfo)

    但是,这种方式比较简单,如果想要进行更多的定制操作,需要利用ModelAdmin进行操作,如:

    方式一:
        class UserAdmin(admin.ModelAdmin):
            list_display = ('user', 'pwd',)
     
        admin.site.register(models.UserInfo, UserAdmin) # 第一个参数可以是列表
         
     
    方式二:
        @admin.register(models.UserInfo)                # 第一个参数可以是列表
        class UserAdmin(admin.ModelAdmin):
            list_display = ('user', 'pwd',)

    ModelAdmin中提供了大量的可定制功能,如

    1. list_display,列表时,定制显示的列。

    @admin.register(models.UserInfo)
    class UserAdmin(admin.ModelAdmin):
        list_display = ('user', 'pwd', 'xxxxx')
     
        def xxxxx(self, obj):
            return "xxxxx"

    2. list_display_links,列表时,定制列可以点击跳转。

    @admin.register(models.UserInfo)
    class UserAdmin(admin.ModelAdmin):
        list_display = ('user', 'pwd', 'xxxxx')
        list_display_links = ('pwd',)

    3. list_filter,列表时,定制右侧快速筛选。

    from django.utils.translation import ugettext_lazy as _
     
    @admin.register(models.UserInfo)
    class UserAdmin(admin.ModelAdmin):
        list_display = ('user', 'pwd')
     
        class Ugg(admin.SimpleListFilter):
            title = _('decade born')
            parameter_name = 'xxxxxx'
     
            def lookups(self, request, model_admin):
                """
                显示筛选选项
                :param request:
                :param model_admin:
                :return:
                """
                return models.UserGroup.objects.values_list('id', 'title')
     
            def queryset(self, request, queryset):
                """
                点击查询时,进行筛选
                :param request:
                :param queryset:
                :return:
                """
                v = self.value()
                return queryset.filter(ug=v)
     
        list_filter = ('user',Ugg,)
    View Code
  • 相关阅读:
    js 使用${}解析变量代替++
    laravel 返回自定义错误
    Java集合之HashMap源码解析
    Java集合之ArrayList源码解析
    Java集合之LinkedList源码解析
    保证消息可靠性传输以及幂等性
    Java分布式系统---消息中间件
    Java中的日期与时间
    Java时区问题
    数据测试002:利用Jmeter推送测试数据(上)
  • 原文地址:https://www.cnblogs.com/tyl23/p/11809358.html
Copyright © 2020-2023  润新知