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