Django管理器和元选项
一、管理器:
应用场景:1.改变查询的结果集 2.添加额外的方法
1 class BookInfoManger(models.Manager): 2 """自定义图示模型管理类""" 3 # 改变查询的结果集 4 def all(self): 5 # 1.调用父类的all方法,获取所有数据 6 books = super().all() # QuerySet 7 # 2.对数据进行过滤 8 books = books.filter(isDelete=False) 9 # 3.返回数据 10 return books 11 12 # 封装函数,操作模型类对应的数据表(增删改查) 13 def create_book(self, btitle, bpub_date): 14 # 创建一个图书对象 15 # book = BookInfo() 16 model_class = self.model 17 book = model_class() 18 book.btitle = btitle 19 book.bpub_date = bpub_date 20 # 保存数据 21 book.save() 22 # 返回book 23 return book 24 25 26 class BookInfo(models.Model): 27 """图书模型类""" 28 # 图书名称 29 btitle = models.CharField(max_length=20) 30 # 出版日期 31 bpub_date = models.DateField() 32 # 阅读量 33 bread = models.IntegerField(default=0) 34 # 评论量 35 bcomment = models.IntegerField(default=0) 36 # 逻辑删除标记 37 isDelete = models.BooleanField(default=False) 38 # 自定义一个Manger类对象 39 objects = BookInfoManger()
二、元选项:
应用场景:工作中表已经创建好,需要创建模型类来对应表或者需要修改项目APP名称,通过定义元类指定表名,可以让表名脱离app名称限制。
定义好后重新生成迁移文件并执行迁移,表名就会更改。
定义方法(在模型类中):
class BookInfo(models.Model): """图书模型类""" 。。。。。。 class Meta: # 创建元类,指定表名,让表名脱离app名称限制 db_table = 'bookinfo'