zoukankan      html  css  js  c++  java
  • django的模型类管理器-----------数据库操作的封装

    模型实例方法

    • str():在将对象转换成字符串时会被调用。
    • save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句。
    • delete():将模型对象从数据表中删除,ORM框架会转换成对应的delete语句。

    模型类的属性

    属性objects:管理器,是Manager类型的对象,用于与数据库进行交互。

    当没有为模型类定义管理器时,Django会为模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects。

    管理器是Django的模型进行数据库操作的接口,Django应用的每个模型都拥有至少一个管理器。Django支持自定义管理器类,继承自models.Manager。

    自定义管理器类主要用于两种情况:

    • 1.修改原始查询集,重写all()方法
    • 2.向管理器类中添加额外的方法,如向数据库中插入数据。

    1.修改原始查询集,重写all()方法。

    #图书管理器
    class BookInfoManager(models.Manager):
        def all(self):
            #默认查询未删除的图书信息
            #调用父类的成员语法为:super().方法名
            return super().all().filter(isDelete=False)

    b)在模型类BookInfo中定义管理器

    class BookInfo(models.Model):
        ...
        books = BookInfoManager()

    2.在管理器类中定义创建对象的方法

    当创建模型类对象时,django不会对数据库进行读写操作,调用save()方法才与数据库交互,进行insert或update操作,将数据保存到数据库中。如果模型类的属性比较多,逐个属性赋值很麻烦,推荐使用管理器

    class BookInfoManager(models.Manager):
        ...
        #创建模型类,接收参数为属性赋值
        def create_book(self, title, pub_date):
            #创建模型类对象self.model可以获得模型类
            book = self.model()
            book.btitle = title
            book.bpub_date = pub_date
            book.bread=0
            book.bcommet=0
            book.isDelete = False
            # 将数据插入进数据表
            book.save()
            return book

    b)为模型类BookInfo定义管理器books语法如下

    class BookInfo(models.Model):
        ...
        books = BookInfoManager()

    c)调用语法如下:

    调用:book=BookInfo.books.create_book("abc",date(1980,1,1))
  • 相关阅读:
    搭建james邮件服务器
    Spring -- AOP
    【RF库Collections测试】List Should Not Contain Duplicates
    【RF库Collections测试】Keep In Dictionary
    【RF库Collections测试】Insert Into List
    【RF库Collections测试】Get Index From List
    【RF库Collections测试】Get From List
    【RF库Collections测试】Count Values In List
    【RF库Collections测试】Get Slice From List
    【RF库Collections测试】Copy Dictionary
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/7523228.html
Copyright © 2011-2022 走看看