Django的orm中多对多外键的三种创建方式
Django的orm中多对多外键的三种创建方式
1 from django.db import models 2 3 # 全自动:利用orm自动帮我们创建第三张关系表 4 5 class Book(models.Model): 6 name = models.CharField(max_length=32) 7 authors = models.ManyToManyField(to='Author') 8 9 class Author(models.Model): 10 name = models.CharField(max_length=32) 11 12 """ 13 优点:代码不需要你写 非常的方便 还支持orm提供操作第三张关系表的方法... 14 不足之处:第三张关系表的扩展性极差(没有办法额外添加字段...) 15 """ 16 17 18 19 # 纯手动 20 class Book(models.Model): 21 name = models.CharField(max_length=32) 22 23 class Author(models.Model): 24 name = models.CharField(max_length=32) 25 26 class Book2Author(models.Model): 27 book_id = models.ForeignKey(to='Book') 28 author_id = models.ForeignKey(to='Author') 29 ''' 30 优点:第三张表完全取决于你自己进行额外的扩展 31 不足之处:需要写的代码较多,不能够再使用orm提供的简单的方法 32 不建议你用该方式 33 ''' 34 35 # 半自动 36 class Book(models.Model): 37 name = models.CharField(max_length=32) 38 authors = models.ManyToManyField(to='Author', 39 through='Book2Author', 40 through_fields=('book','author') # through_field后对应元组,字段先后顺序:当前表是谁,就把对应的关联字段放前面 41 ) 42 class Author(models.Model): 43 name = models.CharField(max_length=32) 44 # books = models.ManyToManyField(to='Book', 45 # through='Book2Author', 46 # through_fields=('author','book') 47 # ) 48 class Book2Author(models.Model): 49 book = models.ForeignKey(to='Book') 50 author = models.ForeignKey(to='Author') 51 52 """ 53 through_fields用元组,字段先后顺序 54 判断的本质: 55 通过第三张表查询对应的表 需要用到哪个字段就把哪个字段放前面 56 你也可以简化判断 57 当前表是谁 就把对应的关联字段放前面 58 59 60 半自动:可以使用orm的正反向查询 但是没法使用add,set,remove,clear这四个方法 61 """ 62 63 # 总结:需要掌握的是全自动和半自动 为了扩展性更高 一般我们都会采用半自动(写代码要给自己留一条后路)
分类:
Django框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!