book.heroinfo_set.all( ) # 查处属于该书本的所有英雄(heroinfo_set在模型中没有定义,是由多方 定义外键的时候 一的方自动生成的关系字段) # 2.多查一:查询编号为1的英雄出自的书籍 hero = HeroInfo.objects.get(id=1) # 获取英雄对象 hero.hbook # 定义有关系字段 直接 使用 没有 .first() """内联查询/关联过滤查询 重点""" # 想要查谁,就以谁的模型名开头 # 1.多查一:查询书籍中人物的描述包含"降龙"的书籍 BookInfo.objects.filter( heroinfo__hcomment__contains='降龙') # 多查一,filter里的条件 是用类名小写 # 2.一查多:查询书名为"天龙八部"的所有人物信息 HeroInfo.objects.filter(hbook__btitle='天龙八部') """修改""" # 修改 需要对象.save() 保存到数据库 book = BookInfo.objects.get(btitle='西游记') book.btitle = '西游记后传' book.save() # 修改 update 更新 直接保存数据库 BookInfo.objects.filter(btitle='第二版').update(btitle='第二版<<真的第二先上线>>', bread=30, bcomment=40) """删除""" # 修改 delete 直接保存数据库 book = BookInfo.objects.get( id=6) # 错误写法:book = BookInfo.objects.get(id=6).delete() # base.py里Model类的delete, 先得到对象 再使用对象的实例 book.delete() # 因为get获取得到的是 对象 不是查询集 不能 进行过滤filter操作 # query.py里Queryset类的的delete BookInfo.objects.filter(id__gte=5).delete()
# 打印b2 的 btitle >>> b2.btitle '天龙八部' # 重新定义 b2 的 btitle # >>> b2.btitle = "机器猫" # 存储后即完成了对数据表中数据的修改 >>> b2.save() # 创建一个新的对象 b3 >>> b3 = BookInfo() >>> b3.btitle = "百年孤独" >>> b3.bpub_date = date(1970, 10, 10) >>> b3.save() # .objects.all() 可以获取当前数据表中的所有条目 # >>> b1 = BookInfo.objects.all() # delete 可以用于删除数据表中的数据,删除后无须save()即生效 >>> b3.delete() # 创建一个英雄对象 >>> h = HeroInfo() >>> h.hname = "段誉" # 英雄的性别已经设置了默认值,此处不设置也可以 >>> h.hgender = False >>> h.hcomment = "六脉神剑" # 英雄所在的书籍对应 b2 对象所在的书籍 即 "天龙八部" >>> h.hbook = b2 >>> h.save() # 获取 数据表中id为1的数据 >>> h3 = HeroInfo.objects.get(id=1) >>> h3.hname '段誉' # 获取 h3 对应的书籍的id