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'

猜你喜欢

转载自www.cnblogs.com/zzmx0/p/12815536.html