首页 > 第七章、模型详解 -- 增删改操作

第七章-修改,第七章、模型详解 -- 增删改操作

互联网 2021-01-18 17:36:34
在线算命,八字测算命理

模型类实例方法

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

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

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

向app_bookinfo表中插入记录

 

def cure(request):b = BookInfo()# 创建图类对象b.btitle = '天龙八部'# 添加属性值ab.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 = Falsep.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 = titlebook.bpub_date = pub_datebook.bread = 0book.bcommet = 0book.isDelete = Falsebook.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_bookinfo在模型类BookInfo中,使用元选项db_table将数据表名定义为bookinfo

 

class BookInfo(models.Model):... class Meta:# 定义元选项db_table='bookinfo'# 指定BookInfo生成的数据表名为bookinfo

 

免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。