Django创建多对多表关系的三种方式

一、全自动(不推荐)

  • 优点:django orm会自动创建第三张表
  • 缺点:只会创建两个表的关系字段,不会再额外添加字段,可扩展性差
    class Book(models.Model):
        # ...
        authors = models.ManyToManyField(to='Author')
        
    class Author(models.Model):
        # ...
        pass

     

二、纯手动(不推荐)

  • 优点:第三张表可以根据自己的要求随意添加额外的字段
  • 缺点:orm在查询的时候,很多方法不支持,查询非常麻烦
复制代码
class Book(models.Model):
    # ...
    pass
    
class Author(models.Model):
    # ...
    pass
    
class Book_Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    # ...
    pass
复制代码

三、半自动

  • 优点:手动建表,但要告诉orm第三张表是自己建的,orm只需要提供查询方法
  • 缺点:虽然可以使用orm的查询方法,但不支持使用add(), set(), remove(), clear()
复制代码
class Book(models.Model):
    # ...
    authors = models.ManyToManyField(to='Author', through='Book_Author', through_fields=('book', 'author'))

class Author(models.Model):
    # ...

    
class Book_Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    # ....
复制代码

 

说明:

  • 半自动在创建外键的时候,要添加两个参数,through='关系表名‘和through_fiedls=('此表在关系表中字段名‘, '关联表在关系表中的字段名')
  • through_fiedls中的字段顺序:第三张表通过哪个字段查询单表,就把哪个字段放在前面
  • 方法三的好处:在项目后续迭代更新中,如果有需求,可向关系表中增加字段,给自己留条后路
posted @   未来可期_Durant  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-07-06 如何获取Android的包名和启动页
2021-07-06 怎么判断一个bug到底是前端的bug还是后端的bug
点击右上角即可分享
微信分享提示