admin组件使用
1、创建一个Django项目
2、在models里面创建表
class Publish(models.Model): name = models.CharField(max_length=32) email = models.EmailField() addr = models.CharField(max_length=64) def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=32) age = models.IntegerField() def __str__(self): return self.name class Book(models.Model): title = models.CharField(max_length=32) publishDate = models.DateField() price = models.DecimalField(max_digits=6, decimal_places=2) publsher = models.ForeignKey(to="Publish", on_delete=models.CASCADE) authors = models.ManyToManyField(to="Author") def __str__(self): return self.title
3、生成这些表
python manage.py makemigrations
python manage.py migrate
4、 创建一个超级用户
python manage.py createsuperuser
5、浏览器输入 127.0.0.1:8000/admin ,用超级用户登录,就可以进入界面
使用管理工具
1、构建基本表
在admin.py文件下操作
from django.contrib import admin from app01 import models from app01.models import Book, Publish, Author # 应用模块 # Register your models here. class BookConfig(admin.ModelAdmin): list_display = ["title", "publishDate", "price", "publsher"] # 定义显示内容 class PublishConfig(admin.ModelAdmin): list_display = ["name", "email", "addr"] class AuthoConfig(admin.ModelAdmin): list_display = ["name", "age"] admin.site.register(Book, BookConfig) # 注册页面 admin.site.register(Publish, PublishConfig) admin.site.register(Author, AuthoConfig)
ModelAdmin中的可定制功能
1. list_display,列表时,定制显示的列。
默认只显示一列,可以自定义显示多列
class BookConfig(admin.ModelAdmin): list_display = ["title", "publishDate", "price", "publsher"] # 定义显示内容,不能显示多对多
2. list_display_links,列表时,定制列可以点击跳转。
list_display_links = ["name", "email", "addr"]
3、定制多对多的列
class BookConfig(admin.ModelAdmin): def show_author(self, obj): return ' | '.join([obj.name for obj in obj.authors.all()]) # obj.authors.all() 拿到一个Authors表的QuerySet,用列表推导式拿到name字段,用join进行字符串拼接 list_display = ["title", "publishDate", "price", "publsher", "show_author"] # 定义显示内容
4、搜索框
search_fields = ["title", "price"]
5、定义action里面的函数
分三步
def func(self, request, queryset): # 1、定义一个函数,queryset接收的是勾选的对象 queryset.update(price=0) func.short_description = "重置价格为0" # 2、给这个函数命名,“价格初始化” actions = [func] # 3、 第三部就这么写
6、 分级过滤 (类似淘宝:“裤子,休闲,100-200,深圳发货” 多重分类筛选)
list_filter = ["publsher", "price", "state"]