多对多的三种创建方式
# 全自动:就是利用orm自动帮你创建第三张表关系
"""
优点:第三张关系表的代码不需要自己写还支持orm操作第三张表关系
缺点:第三张表关系扩展性很差(没办法创建额外的字段)
"""
# 纯手动
就是自己创建第三张关系表
"""
优点:第三张表完全取决于你自己的额外的扩展
缺点:需要手写的代码多 而且不支持orm提供的简单方法操作第三张表,所以不推荐
"""
# 半自动
class Book(models.Models):
name = models.CharField(max_length=32)
authors = models.ManyToManyField(to='Author',
through='Book2Author', # 第三张关系表名
through_field=('book','author') # 关联表名的字段)
class Author(models.Model):
name = models.CharField(max_length=32)
# books = models.ManyToManyField(to='Book',
# through='Book2Author',
# through_fields=('author','book')
# )
class Book2Author(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author')
"""
在ManyToManyField字段里面加两个参数参数through="关联表名" through_fields=('book','author') 关联表第三张表的字段
through_fields字段先后顺序的判断
判断本质
通过第第三张表查询对应的表 需要用到那个字段就将那个字段放在前面
或者当前表是谁 就把对应的关联字段放在前面
# 半自动:可以使用orm的正反向查询 但是无法使用add、set、remove、clear
"""
# 总结:在平常测试的时候用全自动扩展性低 而在写项目的时候用半自动 扩展性高