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