Django模型层—多表操作
添加记录
一对多
方式1: publish_obj=Publish.objects.get(nid=1) book_obj=Book.objects.create(title="",publishDate="2012-12-12",price=100,publish=publish_obj) 方式2: book_obj=Book.objects.create(title="",publishDate="2012-12-12",price=100,publish_id=1)
多对多
(1) # book=Book.objects.filter(name='红楼梦').first() # print(book) # 在点publish的时候,其实就是拿着publish_id又去app01_publish这个表里查数据了 # print(book.publish) # (2)book.authors.all()
多对多关系以及其他API
book_obj.authors.remove() # 将某个特定的对象从被关联对象集合中去除。 ====== book_obj.authors.remove(*[]) book_obj.authors.clear() #清空被关联对象集合 book_obj.authors.set() #先清空再设置
基于对象的跨表查询
一对多查询
正向查询按字段,反向查询按表名_set
A表book(关联自动段) B表 publish # 正向查询 A--->B 关联字段再A,A去查询B表,这叫正向查询,按字段来查 # 反向查询 B--》A 关联字段再A,B去查询A表,这叫反向查询,按表明小写_set
# 一对多正向查询 book=Book.objects.filter(name='红楼梦').first() print(book.publish)#与这本书关联的出版社对象 print(book.publish.name) # 一对多反向查询 # 人民出版社出版过的书籍名称 pub=Publish.objects.filter(name='人民出版社').first() ret=pub.book_set.all() print(ret) 复制代码
多对多查询
正向查询按字段,反向查询按表名_set
A表book(关联自动段) B表 publish # 正向查询 A--->B # 反向查询 B-->A 总结:一对一 正向:按字段 反向:按表名小写 一对多 正向:按字段 反向:按表名小写_set 多对多 正向:按字段 反向:按表名小写_set
# 正向查询----查询红楼梦所有作者名称 book=Book.objects.filter(name='红楼梦').first() ret=book.authors.all() print(ret) for auth in ret: print(auth.name) # 反向查询 查询lqz这个作者写的所有书 author=Author.objects.filter(name='lqz').first() ret=author.book_set.all() print(ret)
基于双下划线跨表查询
正向查询按字段,反向查询按表名小写用来告诉ORM引擎join哪张表
总结:用__告诉orm,要连接那个表
一对一: 正向:按字段 反向:按表名小写
一对多: 正向:按字段 反向:按表名小写
多对多: 正向:按字段 反向:按表名小写