Django中ORM多对多三种创建方式(全自动-纯手动-半自动)

一:多对多三种创建方式

1.全自动: 利用orm自动帮我们创建第三张关系表
copy
class Book(models.Model): name = models.CharField(max_length=32) authors = models.ManyToManyField(to='Author') class Author(models.Model): name = models.CharField(max_length=32) 优点: 代码不需要自己写 非常方便 还支持orm提供操作第三张关系表的方法 不足之处: 第三张关系表的扩展性极差(没办法额外添加字段)
2.纯手动
copy
class Book(models.Model): name = models.CharField(max_length=32) authors = models.ManyToManyField(to='Author') class Author(models.Model): name = models.CharField(max_length=32) class Book2Author(models.Model): book_id = models.ForeignKey(to='Book') author_id = models.ForeignKey(to='Author') 优点: 第三张表完全取决你自己进行额外的扩展 不足之处: 需要写的代码较多,不能再使用orm提供的简单的方法 不建议使用
3.半自动
copy
class Book(models.Model): name = models.CharField(max_length=32) authors = models.ManyToManyField(to='Author', through='Book2Author', through_fields=('book','author')) class Author(models.Model): name = models .CharField(max_length=32) class Book2Author(models.Model): book = models.ForeignKey(to='Book') author = models.ForeignKey(to='Author') 半自动:可以使用orm的正反向查询 但是没法使用add,set,remove,clear这四个方法
4.半自动全文解析
copy
through : 告诉orm我跟作者是多对多的关系,我是通过我自己写的表创建关系的 该表Book2Author 创建关系 为何使用through='Book2Author'? 防止第三张表中还有其他字段,所以我们还需要一张表,来告诉第三张表, 书籍跟作者是通过哪些字段来绑定关系的 through_fields: 告诉orm书籍跟作者是通过book,author字段来绑定关系的
copy
to = 'author' 让orm知道书籍跟作者是多对多 through = 'Book2Author' 并且告诉orm不需要再创建表,自己手动已经创建好了 through_fields 告诉orm书籍跟作者是通过book,author字段来绑定关系的
5.半自动through_fields=('book','author')的顺序
copy
through_fields=('book','author')的顺序: 1.顺序由当前第三张查询对应关系的author表通过那个字段 2.通过book,所以book放在第一位,然后第二个字段放在第二位 through_fields字段先后顺序 判断的本质: 通过第三张表查询对应的表 需要用到哪个字段就把哪个字段放前面 你也可以简化判断 当前表是谁 就把对应的关联字段放前面
6.总结:
copy
你需要掌握的是全自动和半自动 为了扩展性更高 一般我们都会采用半自动(写代码要给自己留一条后路)
posted @   AlexEvans  阅读(211)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
🚀