美文网首页
07.模型详解 -- 增删改操作

07.模型详解 -- 增删改操作

作者: __深蓝__ | 来源:发表于2019-03-13 08:51 被阅读0次

    模型类实例方法

    数据表的增、删、改操作通过模型类实例方法完成

    • save():将模型对象保存到数据表中,ORM框架会映射成对应的insertupdate语句。
    • delete():将模型对象从数据表中删除,ORM框架会映射成对应的delete语句。

    实例演练: 将‘天龙八部’插入到图书表中
    修改urls.py文件,增加一条路由:url('cure', views.cure),
    修改views.py文件,增加cure()函数

    • app_bookinfo表中插入记录
    def cure(request):
        b = BookInfo()  # 创建图类对象
    
        b.btitle = '天龙八部'  # 添加属性值a
        b.bpub_date = date(1990, 10, 11)
    
        b.save()  # 映射成insert语句
    
        return HttpResponse('执行结束')
    
    • 将红楼梦的发行时间修改为1987-08-15
    def cure(request):
        b = BookInfo.objects.get(btitle='红楼梦')
        b.bpub_date = '1987-08-15'
    
        b.save()  # 映射成update语句
    
        return HttpResponse('执行结束')
    
    • 将郭靖添加到天龙八部中
    def cure(request):
        p = PersonInfo()
        p.pname = '郭靖'
        p.pgender = False
        p.pcomment = '降龙十八掌'
    
        b2 = BookInfo.objects.get(btitle='天龙八部')
        p.hbook = b2  # 外键赋值,指定人物对象的所属图书
    
        p.save()
    
        return HttpResponse('执行结束')
    
    • 删除人名为公孙胜的记录
    def cure(request):
        p = PersonInfo.objects.get(pname='公孙胜')
        p.delete()
    
        return HttpResponse('执行结束')
    

    管理器(Manager)

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

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

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

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

    实例演练: 默认查询未删除的图书信息

    a) 修改models.py文件,定义管理器类BookInfoManager

    class BookInfoManager(models.Manager):
        def all(self):
            return super().all().filter(isDelete=False)
    

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

    class BookInfo(models.Model):
        bookm = BookInfoManager()  # 管理器对象
        ...
    

    c) 修改views.py文件,使用管理器对象bookm调用all()方法(如果再使用objects将出错)

    def index(request):
        b = BookInfo.bookm.get(id=1)
        ...
    
      三国演义
    

    向管理器类添加额外的方法

    对模型类的数据表进行操作时,推荐将这些操作方法封装起来,放到模型管理器类中

    实例演练: 添加创建图书类对象的方法

    a)修改models.py文件中的管理类BookInfoManager,增加方法create_book(),通过参数传递对象属性

    class BookInfoManager(models.Manager):
        def create_book(self, title, pub_date):
            book = self.model()  # 使用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中定义管理器对象

    class BookInfo(models.Model):
        bookm = BookInfoManager()  # 管理器对象
        ...
    

    c) 修改views.py文件,使用管理器对象bookm调用create_book()方法

    def index(request):
        BookInfo.bookm.create_book("Python", date(2019, 1, 1))
        ...
    

    模型类的属性

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

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

    元选项

    在模型类中定义类Meta,用于设置元信息

    实例演练: 自定义数据库中自动生成的数据表名

    • 数据表的默认名称为:<app_name>_<model_name>,例如:app_bookinfo
    • 在模型类BookInfo中,使用元选项db_table将数据表名定义为bookinfo
    class BookInfo(models.Model):
        ...   
        class Meta:  # 定义元选项
          db_table='bookinfo'  # 指定BookInfo生成的数据表名为bookinfo
    




    - end -

    相关文章

      网友评论

          本文标题:07.模型详解 -- 增删改操作

          本文链接:https://www.haomeiwen.com/subject/zghupqtx.html