一 .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)


 

版权声明:本文为lovershowtime原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lovershowtime/p/11353293.html