1. 1.全自动
    2. 利用ORM自动创建第三张关系表
    3. 之前用到的ManyToManyField就是全自动
    4. 优点:不需要自己去写代码
    5. 缺点:第三张表的拓展性极差,没有办法加额外字段
    6. 2.半自动
    7. class Book(models.Model):
    8. book_name = models.CharField(max_length=32)
    9. author = models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author'))
    10. through参数告诉ORM不要去创建第三张表,through_fields字段告诉ORM通过我们自己写的哪个字段进行第三张表关联
    11. through_fields字段后的值顺序:第三张表查询对应的表,外键字段需要用哪个字段,则哪个排在前面
    12. 换言之:外键字段在哪张表,那字段就哪个在先
    13. class Author(models.Model):
    14. author_name = models.CharField(max_length=32)
    15. class Book2Author(models.Model):
    16. book = models.ForeignKey(to='Author')
    17. author = models.ForeignKey(to='Book')
    18. 可以使用ORM的正方向查询,但没法使用addsetremoveclear这四个方法
    19. 为了拓展性更高,一般都推荐使用半自动
    20. 3.全手动
    21. models.ForeignKey(to='')
    22. 自己指定一切
    23. 优点:第三张表完全取决于自己
    24. 缺点:需要写代码较多,ORM不能够再使用一些简单的方法
    25. 例如:add remove 正方向查询等
    26. 因此不建议用该方式
    27. 全手动不需要掌握