模型类实例方法
数据表的增、删、改操作通过模型类实例方法完成
- 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 = '天龙八部' # 添加属性值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 -
网友评论