booktest-8 管理器对象

1.进入django shell

2.导入类,查询objects类型

booktest-8 管理器对象_第1张图片

3.在BookInfo里面加入管理器类对象,重新进入shell

book=models.manager.Manager()

4.用BookInfo.objects.all()会报错,用BookInfo.book.all()则正常,定义了管理器类以后,django就不产生默认的objects

booktest-8 管理器对象_第2张图片

5.添加自定义管理器类

class BookInfoManager(models.manager.Manager):
    def all(self):
        books = super().all()
        #对数据进行过滤
        books= books.filter(isDelete=False)
        return books;

 6.在BookInfo类中增加管理器类对象

 #自定义管理器类
    objects= BookInfoManager()

7.通过PowerCell将最后一条数据的isDelete改为1

booktest-8 管理器对象_第3张图片

8.在终端中重新进入shell,并查询所有数据,就会过滤掉isDelete=1的数据

9.在BookInfo类中增加类方法

  @classmethod
    def create_book(cls, btitle, bpub_date):
        obj = cls()
        obj.btitle = btitle
        obj.bpub_date = bpub_date
        obj.save()
        return obj

10.重新进入shell,通过下面的命令就可以添加数据

booktest-8 管理器对象_第4张图片

11.模型类只是对应表中的数据,一般把CRUD放在管理器类中,删除上面的类方法,将其添加到管理器类中

 #封装函数:操作模型类对应的数据表
    def create_book(self, btitle, bpub_date):
        obj = BookInfo()
        obj.btitle = btitle
        obj.bpub_date = bpub_date
        obj.save()
        return obj

12.重新进入shell,通过管理器类来增加数据

booktest-8 管理器对象_第5张图片

13.其实管理器类已经封装了CRUD方法,但必须按定位参数来传输

 

14.管理器类里面有个model属性,它返回的就是模型类

15.修改CRUD方法,这样如果模型名变了,CRUD方法不用改变

    def create_book(self, btitle, bpub_date):
        #获取self对应的模型类
        #model_class =self.model
        obj = self.model()
        obj.btitle = btitle
        obj.bpub_date = bpub_date
        obj.save()
        return obj

 

你可能感兴趣的:(python)