18、Django-admin管理后台-Meta类
1、先执行数据库迁移
-- python manage.py makemigrations
-- python manage.py migrate
2、在cmd终端先创建管理员账户
-- python manage.py createsuperuser
3、登录
-- http://127.0.0.1:8000/admin/
注册自定义的模型类
若要自己定义的模型类也能在/admin后台管理界面中显示和管理、需要将自己的类注册到后台管理界面
注册步骤:
-- 1、在应用app中的admin.py中导入注册要管理的模型models类、如:
-- from .models import Book
-- 2、调用 admin.site.register 方法进行注册,如:
-- admin.site.register(自定义模型类-在models.py中的类)
3、此时admin后台就有此模型类了
模型管理器类:
-- 为admin后台界面添加便于操作的新功能
-- 后台管理器类必须继承:django.contrib.admin里的ModelAdmin类
使用方法:
1、在admin.py中添加class模型管理器类
class XXXXManager(admin.ModelAdmin):
pass
2、绑定注册模型管理器和模型类
from django.contrib import admin
from .models import *
admin.site.register(YYYY, XXXXManager) #绑定YYYY模型类与管理器类XXXXManager
案例
models.py
from django.db import models
class Book(models.Model): #表名
# 字段 = 数据库字段的属性
title = models.CharField(verbose_name='书名', max_length=100, default='', unique=True)
pub = models.CharField(verbose_name='出版社', max_length=100, default='')
price = models.DecimalField(verbose_name='价格', max_digits=7, decimal_places=2)
market_price = models.DecimalField(verbose_name='市场价', max_digits=7, decimal_places=2, default=0)
is_active = models.BooleanField(verbose_name='是否上架', default=True) #伪删除
# Meta类、一定要在模型类中定义
class Meta:
db_table = 'book' # 表名 、将系统默认的表名改为 book
# 模型类的方法定义、显示输出可视化的属性-如标题、价格等字段显示出来
def __str__(self):
return f"{self.title} - {self.price} - {self.pub} - {self.market_price}"
class Author(models.Model):
name = models.CharField('作者', max_length=100)
age = models.IntegerField('年龄', default=1)
email = models.EmailField('邮箱', null=True)
class Meta:
db_table = 'author'
# 模型类的方法定义、显示输出可视化的属性-如标题、价格等字段显示出来
def __str__(self):
return f"{self.name} - {self.age} - {self.email}"
views.py
views.py
-----------------------------------------------------------------------------------
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from admin_app.models import *
#插入数据到book模型
def index(request):
book1 = Book.objects.create(title='python', pub='oreilly', price=100, market_price=200)
book2 = Book.objects.create(title='java', pub='oreilly', price=100, market_price=200)
book3 = Book.objects.create(title='c++', pub='oreilly', price=100, market_price=200)
book4 = Book.objects.create(title='c', pub='清华大学出版社', price=100, market_price=200)
book5 = Book.objects.create(title='c#', pub='oreilly', price=100, market_price=200)
book6 = Book.objects.create(title='php', pub='oreilly', price=100, market_price=200)
book7 = Book.objects.create(title='go', pub='oreilly', price=100, market_price=200)
#插入作者数据
author1 = Author.objects.create(name='zhangsan', age=18, email='303977142@qq.com')
author2 = Author.objects.create(name='lisi', age=20, email='303977142@qq.com')
author3 = Author.objects.create(name='wangwu', age=22, email='303977142@qq.com')
author4 = Author.objects.create(name='zhaoliu', age=24, email='303977142@qq.com')
author5 = Author.objects.create(name='qianqi', age=26,email='303977142@qq.com')
return HttpResponse('插入作者数据成功')
urls.py
urls.py
---------------------------------------------------------------
from django.contrib import admin
from django.urls import path
from admin_app import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index, name='index'),
]
admin.py
---------------------------------------------------------------------------------------------------
from django.contrib import admin
from .models import Book
# # 注册
# admin.site.register(Book)
class BookManager(admin.ModelAdmin):
from django.contrib import admin
from .models import Book
# # 注册
# admin.site.register(Book)
class BookManager(admin.ModelAdmin):
#参考链接:https://docs.djangoproject.com/en/2.2/ref/contrib/admin
# 列表页显示字段
list_display = ['id', 'title', 'pub', 'price', 'market_price', 'is_active']
# 列表页显示字段的链接、超链接-点击title可以跳到修改页面
list_display_links = ['title']
# 列表页显示字段的过滤器-筛选-类似分类查询
list_filter = ['pub']
# 列表页显示字段的搜索框-模糊查询-输入关键字title进行搜索
search_fields = ['title']
#添加在列表页可编辑的字段-price字段在页面可以直接编辑
list_editable = ['price']
# 列表页显示字段的排序-排序
ordering = ['id']
# 列表页显示字段的分页-分页-每页显示2条信息
list_per_page = 10
# 注册、将模型类绑定模型管理类
admin.site.register(Book, BookManager)
# 注册、将模型类绑定模型管理类
admin.site.register(Book, BookManager)
Meta类
# Meta类、一定要在模型类中定义
class Meta:
db_table = 'book' # 表名 、将系统默认的表名改为 book
# 模型类的名称 -用户显示在admin后台的
# verbose_name = '图书' #一般这个是复数形态 名称后面会有个 s
verbose_name_plural = '图书' # 一般这个是单数形态