1.

创建模型

一对多:

需要在""多""的表创建一个""关键字段"" 关联  就像在mysql的哪项少的比如(书与出版社之间在书之间创建一个关联字段public_id 对应着出版社的主键)

语法:在""多的"" 那边添加

     # 与Publish建立一对多的关系,外键字段建立在多的一方
publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE)
#publish意味着publish_id 关联字段,无需添加id jdango自动添加
#,on_delete=models.CASCADE 级联删除
#to="Publish" 指向 少 的

一对多

多对多

在mysql中需要创建 一个共同的表,但是在django无需这样

注意:

 authors=models.ManyToManyField(to="Author")
#这里注意 ManyToManyField在django生成的是一个表(记住了)
book_author 表里面含有book_id author_id
这里无需加级联删除,因为只有一个

多对多

一对一

同一对多,唯一区别是 ""关联字段"" 是惟一的 unique

 ad=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
这里OneToOneField 在django默认省略 unique 生成字段

一对一

创建

查询

 # 跨表查询,基于对象
from app01.models import Book,Publish,Author,AuthorDetail
# def books(request):
# 一对多添加
# 方式一 找出存储的出版社地址为条件,找到对象 然后将publish=找到的对象
# pub_obj=Publish.objects.filter(name="云南出版社").first()
# Book.objects.create(title="python",price="100",pub_date="2018-10-17",publish=pub_obj)
# 方式二 在对象里添加publish_id=对应的主键
# Book.objects.create(title="linux", price="100", pub_date="2018-10-17", publish_id=1)
# return HttpResponse("OK")
# 多对多添加
# 方式一 找到要把做作者加入书籍的书籍对象,然后在找到对应作者的主键(也就是找model对象),因为authors也是属性,
# 通过 book.authors.add把作者加入
# book=Book.objects.filter(title="css").first()
# alex=Author.objects.filter(name="alex").first()
# egon=Author.objects.filter(name="egon").first()
# 方式二 找到要把做作者加入书籍的书籍对象,然后通过book.authors.add() 加入对应的作者的主键数字
# book.authors.add(1,2)
# 方式三 当你取到的是一串列表的时候,需要一个个去,这里可以应用打散
# book.authors.add(*[1, 2]) ############查询
# 一对多
# 查询主键为1的书籍的出版社所在的城市
# 正向查询 找到主键为一的对象 再通过对象的属性publish 找出
# book_obj=Book.objects.filter(nid=1).first()
# book_obj是主键为1的书籍对象关联的出版社对象
# print(book_obj.publish.email)
# 找到云南出版社出版的书
# 反向查询
# publish_obj=Publish.objects.filter(name="云南出版社")
# print(publish_obj.book_set.all()) # 多对多
# 正向查询
# book=Book.objects.filter(title="python").first()
# ret=book.authors.all().values("age")
# print(ret)
# 反向查询
# alex=Author.objects.filter(name="alex").first()
# print(alex.book_set.all()) # 一对一 找对象 没有反向
# alex=Author.objects.filter(name="egon").first()
# print(alex.ad.addr) # ad=AuthorDetail.objects.filter(tel=123).first()
# print(ad.author.name) #
# return HttpResponse("OK")

创建,查询

最新文章

  1. 《Linux内核设计与实现》CHAPTER17阅读梳理
  2. Java NIO之通道Channel
  3. ie8及ie8以下支持html5 video标签
  4. cocos2dx在ubuntu下配置声音引擎
  5. Struts+Hibernate+jsp页面 实现分页
  6. 241. Different Ways to Add Parentheses——本质:DFS
  7. unsupported dynamic reloc R_ARM_REL32 AND hidden symbol '__dso_handle' is not defined
  8. oracle 对象上锁,不能插入或删除情况
  9. Tomcat 官网知识总结篇
  10. C#调用Outlook来发送邮件
  11. java系列-JDBC的封装
  12. JavaWeb之html
  13. 最小生成树 HDU1301 (kuskal & prim)
  14. 新的blog站地址
  15. Kettle系列: 马进举开源的Kettle通用插件 KettleEasyExpand
  16. [No0000D9]删除指定文件夹.bat改命或合并文件
  17. lock 相关
  18. 用Python写简单的爬虫
  19. 使用putty连接本地VirtualBox上的centos7 linux主机
  20. scp加端口号

热门文章

  1. CSP2019 Emiya 家今天的饭 题解
  2. [LeetCode] 920. Number of Music Playlists 音乐播放列表的个数
  3. [LeetCode] 343. Integer Break 整数拆分
  4. [原创]A/B测试系统调研思维导图
  5. iphone 移动端操作记录
  6. Qt Quick 常用元素:Textinput 与 TextEdit 文本编辑框
  7. 一个网页从输入URL到页面加载完成的过程中都发生了什么事情?
  8. linux php composer安装和使用教程
  9. Java学习清单
  10. 如何解决macbook pro摄像头不工作的问题