博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-day71--django多表操作
阅读量:5321 次
发布时间:2019-06-14

本文共 2798 字,大约阅读时间需要 9 分钟。

表关系:         1 一对多         2 多对多         3 一对一                                  添加记录:     一对多:书与出版社         #创建一对多:            publish=models.ForeignKey("Publish")            注意:publish不用写成publish_id,"Publish" 默认找Publish表的主键         #添加记录方式1:            models.Book.objects.create(name='红楼梦',publish_id=1)         #添加记录方式2:            # pubObj=models.Publish.objects.filter(name="人民出版社")[0]            # models.Book.objects.create(name='红楼梦',publish=pubObj)  # 关联的出版社对象     多对多:书与作者          创建多对多关系:            authorlist=models.ManyToManyField("Author")         多对多添加记录:            先创建Book对象,→ 对象.authorlist.add(作者对象)                             book_obj=models.Book.objects.create(title="追风筝的人", price=100, publishDate="2017-12-12", publish_id=2)                             alex_obj=models.Author.objects.filter(name="alex")[0]            egon_obj=models.Author.objects.filter(name="egon")[0]                             book_obj.authorlist.add(alex_obj,egon_obj)                 解除多对多关系:            先找到书对象→书对象.authorlist.remove(作者对象)                         清除多对多关系:            先找到书对象→书对象.authorlist.clear()      一对一:         创建一对一关系            创建出版社与出版社详情一对一关系:            pubdetail=models.OneToOneField('Pubdetail')   在创建表的关联时 也可以指定哪个表和哪个字段,用 to 的形式     models.ForeignKey(to="Publish",to_field="nid")   多对多和多对一同理查询记录:    正向查询:         一对多:           linux_obj=models.Book.objects.filter(title="linux").first()           print(linux_obj.publish.name)  # 与这本书对象关联的出版社对象的名字                             多对多:           先找到要找的书对象→对象.authorlist.all()           linux_obj=models.Book.objects.filter(title="linux").first()           print(linux_obj.authorlist.all()) # 与这本书关联的所有作者对象集合                         一对一:           查找书的出版社的地址           先找到书对象→出版社对象→出版社对象.pubdetail.addr      反向查询:   book_set 是在创建关系的时候默认创建的,用于反向查询        #一对多的反向查询:                                 eg:人民出版社出版过的书籍的名字           先找到出版社对象→出版社对象.book_set.all()           publish_obj=models.Publish.objects.filter(name="人民出版社")[0]           print(publish_obj.book_set.all()) # 与该年出版社关联的所有书籍对象的集合                             #多对多的反向查询:           查询yuan出版过的所有书籍的名字和价格:           先找到作者对象→作者对象.book_set.all()           author_yuan=models.Author.objects.get(name="yuan")           print(author_yuan.book_set.all())  # 与该作者关联的所有书籍书籍对象的集合                                      #一对一的反向查询:           查找地址为北京的出版社出版的所有书           出版社详情表的对象.pubdetail.book.all()注意:在已有记录的表中新增字段时需设置默认值(让已有的记录在该字段显示默认值),并且重新迁移数据库

 
直接赋值:通过赋值一个新的可迭代的对象,关联对象集可以被整体替换掉。>>> new_list = [obj1, obj2, obj3]>>> book_obj.author = new_list     #直接替换  ,多对一和一对一想换值同样可以使用直接替换 book_obj.publish=new_publish_obj   ..... 如果外键关系满足null=True,关联管理器会在添加new_list中的内容之前,首先调用clear()方法来解除关联集中一切已存在对象的关联。否则, new_list中的对象会在已存在的关联的基础上被添加。
 

 

 
 
 

 

转载于:https://www.cnblogs.com/liuwei0824/p/7751905.html

你可能感兴趣的文章
关于 linux 的 limit 的设置
查看>>
HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)
查看>>
vim中文帮助教程
查看>>
MySQL基础3
查看>>
RxJS & Angular
查看>>
面向对象(多异常的声明与处理)
查看>>
MTK笔记
查看>>
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>