3. 创建多对多表关系的三种方式
3.1 全手动
优点:
- 第三张表可以任意的添加额外的字段
缺点:
- orm查询的时候很多方法都不支持,查询的时候非常麻烦
如图:
3.2 全自动
优点:
- django orm会自动帮你创建第三张关系表
缺点:
- 但是它只会帮你创建两个表的关系字段 不会再额外添加字段
- 虽然方便 但是第三张表的扩展性较差 无法随意的添加额外的字段
class Book(models.Model):
...
authors = models.ManyToManyField(to='Author')
class Author(models.Models):
...
3.3 半自动
优点:
- 手动建表,那就可以添加额外的字段,告诉orm第三张表是你自己建的
- orm给我提供方便的查询方法
缺点:
- 第三种虽然可以使用orm查询方法,但是不支持使用
add()
、set()
、remove()
、clear()
注意:
-
半自动一定要加两个额外的参数:
through='Book2Author'
,through_fields=('book','author')
-
后面字段的顺序由第三张表通过哪个字段查询单表 就把哪个字段放前面