九 .Django 管理后台(admin)

一 .admin管理后台

1.基本应用

2 admin配置参数

    后台数据库管理页面 
    
    admin model:
    
    对每一个app下的model设计出增伤改查4个url
    
        查看book:
        http://127.0.0.1:8000/admin/app01/book/
        添加book: 
        http://127.0.0.1:8000/admin/app01/book/add/    
        编辑book:
        http://127.0.0.1:8000/admin/app01/book/1/change/
        删除book:
        http://127.0.0.1:8000/admin/app01/book/1/delete/

Admin的实现流程:
        1 启动:
              import admin
              def autodiscover():
                   autodiscover_modules('admin', register_to=site)
                   
                   
               执行每一个app下的admin.py文件
        2 注册
        
              单例模式
              
              
        
        
        3 设计URL
    

https://www.cnblogs.com/Sup-to/p/11094767.html    单例模式

https://www.cnblogs.com/yuanchenqi/articles/8323452.html              Django-admin管理工具

https://www.django.cn/course/show-11.html   

admin界面汉化
默认admin后台管理界面是英文的,对英语盲来说用起来不方便。可以在settings.py中设置: LANGUAGE_CODE
= 'zh-CN' TIME_ZONE = 'Asia/Shanghai' 1.8版本之后的language code设置不同: LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'

 创建管理员用户:  
                                                 
python  manage.py  createsuperuser

执行:  python  manage.py  createsuperuser

        例如用户名: loverto            (lovertao)
        密码 :1234567890a             (1234567890lv)

 2. 基本注册

from django.contrib import admin
from blog.models import Blog
  
#Blog模型的管理器
class BlogAdmin(admin.ModelAdmin):
    list_display=('id', 'caption', 'author', 'publish_time')
     
#在admin中注册绑定
admin.site.register(Blog, BlogAdmin)
  上面方法是将管理器和注册语句分开。有时容易忘记写注册语句,或者模型很多,不容易对应。



print(****************************************************)

该方法是Django1.7的版本新增的功能:带装饰器注册
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')



 3. 记录列表基本设置

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

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

from django.contrib import admin
# 站点管理
from django.contrib import admin
from .models import Grades, Students
# 意思创建班级时在附带两个学生
class StudentsInfo(admin.TabularInline):
    model = Students
    extra = 2
# 自定义管理界面
class GradesAdmin(admin.ModelAdmin):
    inlines = [StudentsInfo]  # 意思创建班级时在附带两个学生  意思加俩行
    # 列表页属性
    list_display = ['pk','gname','gdate','ggirlnum','gboynum','isDelete']  # 显示字段
    list_filter = ['gname']  # 过滤字段
    search_fields = ['gname']  # 搜索字段
    list_per_page =5  # 分页       表示5数据个一页
    # 添加修改页属性  注意: fields 和 fieldsets不能同时使用
    # fields=[]        # 是来规定的属性的先后顺序
    fieldsets = [  # 给属性分组
        ("aa", {"fields": ['ggirlnum','gboynum']}),
        ("bb", {"fields": ['gname','gdate','isDelete']}),
    ]
    # 注册:
admin.site.register(Grades, GradesAdmin)
class StudentsAdmin(admin.ModelAdmin):
    def aa(self):  # 布尔值显示问题(性别):
        if self.sgender:
            return ""
        else:
            return ""

    aa.short_description = "性别"  # 设置页面列的名称
    def bb(self):  # 布尔值显示问题(是否删除):
        if self.isDelete:
            return 1
        else:
            return 0
    bb.short_description = "是否删除"  # 设置页面列的名称简短的描述
    list_display = ['pk', 'sname', 'sage',aa,'scontend','grad',bb,]
    list_per_page = 3
    # 页面执行动作的位置
    actions_on_top = False
    actions_on_bottom = True
# 注册:
admin.site.register(Students, StudentsAdmin)
我们可以设置其他字段也可以点击链接进入编辑界面。


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

4 .筛选器

筛选器是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'    # 详细时间分层筛选 



5. 自定义颜色显示

from django.db import models
from django.contrib import admin
from django.utils.html import format_html
 
class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    color_code = models.CharField(max_length=6)
 
    def colored_name(self):
        return format_html(
            '<span style="color: #{};">{} {}</span>',
            self.color_code,
            self.first_name,
            self.last_name,
        )
 
class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name')




6. 调整页面头部显示内容和页面标题

class MyAdminSite(admin.AdminSite):
    site_header = '好医生运维资源管理系统'  # 此处设置页面显示标题
    site_title = '好医生运维'  # 此处设置页面头部标题
 
admin_site = MyAdminSite(name='management')


from django.contrib import admin
from hys_operation.models import *
 
 
# class MyAdminSite(admin.AdminSite):
#     site_header = '好医生运维资源管理系统'  # 此处设置页面显示标题
#     site_title = '好医生运维'
#
# # admin_site = MyAdminSite(name='management')
# admin_site = MyAdminSite(name='adsff')
admin.site.site_header = '修改后'
admin.site.site_title = '哈哈'


 

 

 

# admin.py

from django.contrib import admin

from app01 import models  # 导入models


def set_price(modelAdmin,request,queryset):  # 这个方法用于admin中action下拉列表加功能
  queryset.update(pirce=500)
  set_price.short_description = '修改价格为500'


class BookAdmin(admin.ModelAdmin):  # 自己定义一个类
  list_display = ('id','name','price','pub_date')  # 列表显示字段
  list_editable = ('name', 'price')  # 设置列表显示的哪些字段可直接修改
  filter_horizontal = ('authors'),  # 设置作者多选字段可筛选
  list_per_page = 3  # 每页显示的记录数,默认为20
  search_fields = ('id', 'name', 'publish__name')  # 设置可按哪些字段进行搜索
  list_filter = ('pub_date', 'publish')  # 在右边出现一个根据定义的字段filter菜单
  ordering = ('puice',)  # 显示时以价格升序
  ordering = ('-price', 'id',)  #显示时以价格降序,第二排序字段为id升序

  actions = [set_price,]  # 向action下拉列表增加set_price功能

admin.site.register(models.Author)  # 注册models中的表 admin.site.register(models.Book,BookAdmin) admin.site.register(models.Publish)
# models.py

form django.db import models

class Book(models.Model):  # 表名book,django会自动使用项目名+我们定义的表名
  # 如没有自定义主键,django会自动添加一个主键,字段名id 自增
  name = models.CharField(max_length=20,verbose_name='书名')  # 在admin中显示字段名为书名
  price = models.IntegerField(‘价格’)   # 如果verbose_name设置为第一个参数,可不用写verbose_name
  pub_date = models.DateField()   # 字段名pub_date 类型 date (时间戳)
  publish = models.ForeighKey('Publish')  # 创建外键关联到Publish表的id字段,django会自动将该名称改为publish_id  
   # 如果这样写 publish = models.ForeighKey(Publish) 括号内无引号,则必须将Publish类放到Book类的上面
  authors = models.ManyToManyField('Author')  将book与author表做多对多关系
  # django会自动创建一张表(book与author的中间关联表)名称为appname_book_authors
   
  def __str__(self):
    return self.name  # 打印实例对象时显示为self.name


#class Book_Author(models.Model):  自己创建第三张表
#  book = models.ForeignKey('book')
#  author = models.ForeignKey('Author')

class Publish(models.Model):
  name = models.CharField(max_length=32)
  city = models.CharField(max_length=32)

class Author(models.Model):
  name = models.CharField(max_length=32)
  age = models.IntegerField()

  def __str__(self):
    return self.name

https://www.cnblogs.com/wumingxiaoyao/p/6928297.html   admin资料

http://www.liujiangblog.com/course/django/158   自定义admin

https://www.cnblogs.com/weiweifeng/p/8477833.html   自定义admin

https://www.django.cn/course/show-16.html    自定义admin

 

 

 

admin



from django.contrib import admin

# Register your models here.

from .models import *

from django.utils.safestring import mark_safe


class BookConfig(admin.ModelAdmin):

    def deletes(self):
        return mark_safe("<a href=''>删111除</a>")


    list_display = ["title","price","publishDate",'publish',deletes]
    list_display_links = ["price"]
    list_filter=["price","title","authors","publish"]
    list_editable=["title",]

    search_fields=["title","price"]
    def patch_init(self,request,queryset):

        queryset.update(price=5500)

    patch_init.short_description = "批量初始化"

    actions = [patch_init,]
    # change_list_template="list.html"     # 可定制页面  模板
    fields = ('title',)
admin.site.register(Book,BookConfig)
admin.site.register(Publish)
admin.site.register(Author)
admin.site.register(AuthorDetail)


 

posted @ 2019-08-14 17:15  supreme999  阅读(550)  评论(0编辑  收藏  举报