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字段来绑定关系的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)