开始今日份整理
1.admin组件使用
1.1 创建django项目以及开启APP01
略
1.2 创建类
使用django自带的sqlite3的小型文件型的数据库
注:使用sqlite3类型的数据库需要下载驱动
在app01.models创建类
from django.db import models # Create your models here. class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=5, decimal_places=2) pub_date = models.DateField() publish = models.ForeignKey('Publish', on_delete=models.CASCADE, null=True) # modeles.CASCADE设置串行,由于和出版社关联,在删除出版社的只会删除外键,不会删除对象,只有在null # 为True才可以删除。 staes = models.IntegerField(choices=[(1,'已出版'),(2,'未出版')],default=1) author = models.ManyToManyField('Author') # 一对多关系 def __str__(self): return self.title class Publish(models.Model): # 出版社类 name = models.CharField(max_length=32) city = models.CharField(max_length=32) email = models.EmailField() def __str__(self): return self.name class Author(models.Model): # 作者类 name = models.CharField(max_length=32) age = models.IntegerField() au_detail = models.OneToOneField('Author_detail',on_delete=models.CASCADE,null=True) def __str__(self): return self.name class Author_detail(models.Model): # 作者详情类 tel = models.CharField(max_length=32) address = models.CharField(max_length=64)
使用manage.py文件创建数据表并写入到数据库中,同时创建超级用户
makemigrations:将库写入到内存中
migrate:将内存中的数据写入到数据库中
createsuperuser:创建超级用户,用于登陆admin页面
1.3 admin.py文件编辑
从app01.models中引入项目各个类
在下面输入要创建的页面
admin.site.register(Book,BookConfig)
admin.site.register(Publish,PublishConfig)
admin.site.register(Author,AuthorConfig)
admin.site.register(Author_detail)
启动项目,在网页中打开,展示如下
输入用户名密码,进入到展示页面
1.4 默认显示
对于admin注册的默认显示内容如下,读取querset,如果有__str__属性,则显示__str__属性。
1.5 自定义列表
根据上图,对数据页面上分别添加出版社,作者以及书籍
1.5.1 自定义展示列表
#创建一个自定义类 class BookConfig(admin.ModelAdmin): #用于展示多对多关系,展示书籍作者 # 用于展示 list_display = ['title','price','pub_date','publish','show_authors','staes'] #在book相关admin中添加自定义类,BookConfig为新增 admin.site.register(Book,BookConfig)
上面的list_display为内置用法,用于显示,最后展示如下
1.5.2 自定义展示多对多关系
书籍与作者的关系是多对多关系,需要自定义函数,用于展示!
#用于展示多对多关系,自定义函数show_authors,完整代码如下 class BookConfig(admin.ModelAdmin): def show_authors(self,obj): print("obj",obj) return '|'.join([obj.name for obj in obj.author.all()]) # 用于展示 list_display = ['title','price','pub_date','publish','show_authors',]
多个作者用‘|’分隔。
1.5.3 反射字段
对于表中使用choices的属相,反射对应的字段
在models中如下设置
注:
- django现在默认会将choice的对应的值转换对应的值,默认会显示为对应的出版社或者未出版社
- obj.get_states_display()用于反射choiice对应的值
1.6 批量操作
批量操作为action操作
在上面的BookConfig中写入
#action操作 # 价格初始化 def patch_init(self,request,queryset): print('queryset',queryset) queryset.update(price=0) patch_init.short_description = '价格初始化'#设置多选服务 # 出版状态初始化 def states_status(self,request,queryset): queryset.update(staes=2) states_status.short_description ='出版状态初始化' # 多选服务 actions = [patch_init,states_status] #其中.short_description以及actions为内置应用
展示如下
1.7 多重过滤
在上面的BookConfig类中写入
#多重过滤 list_filter = ['publish','author'] #对出版社以及作者做过滤
展示如下
1.8 排序
在上面的BookConfig类中写入
# 排序 ordering = ['price','-id'] #可以用俩个参数进行排序,默认是升序,加-号变为逆反
1.9 模糊查询
# 模糊查询 search_fields = ['title','price'] #如果title以及价格中都有特定的参数那么都显示
展示如下
admin整体代码
from django.contrib import admin # Register your models here. from app01.models import Book,Publish,Author,Author_detail class BookConfig(admin.ModelAdmin): def show_authors(self,obj): print("obj",obj) return '|'.join([obj.name for obj in obj.author.all()]) # 用于展示 list_display = ['title','price','pub_date','publish','show_authors','staes'] # 用于设置连接的内容 list_display_links = ['title','price'] #action操作 # 价格初始化 def patch_init(self,request,queryset): print('queryset',queryset) queryset.update(price=0) patch_init.short_description = '价格初始化'#设置多选服务 # 出版状态初始化 def states_status(self,request,queryset): queryset.update(staes=2) states_status.short_description ='出版状态初始化' # 多选服务 actions = [patch_init,states_status] #多重过滤 list_filter = ['publish','author'] # 排序 ordering = ['price','-id'] # 模糊查询 search_fields = ['title','price'] class PublishConfig(admin.ModelAdmin): list_display = ['name','city','email'] class AuthorConfig(admin.ModelAdmin): def show_tel(self,obj): print('obj',obj) return obj.au_detail.tel def show_address(self,obj): print('obj',obj) return obj.au_detail.address list_display = ['name','age','show_tel','show_address'] admin.site.register(Book,BookConfig) admin.site.register(Publish,PublishConfig) admin.site.register(Author,AuthorConfig) admin.site.register(Author_detail)