1 多对多的关系,三种写法 2 -手动创建第三张表(不创建关联关系) 3 class Book(models.Model): 4 # 默认会创建id 5 name = models.CharField(max_length=32) 6 class Author(models.Model): 7 name = models.CharField(max_length=32) 8 class Book2Author(models.Model): 9 id = models.AutoField(primary_key=True) 10 book=models.ForeignKey(to='Book',to_field='id') 11 author=models.ForeignKey(to='Author',to_field='id') 12 -不管是插入和查询,删除,都很麻烦(一般不用) 13 -自动创建第三张表 14 -查询,插入,删除,都很方便 15 -缺点:字段是固定的,第三张表如果要添加字段,实现不了 16 -手动创建第三张表,建立关联关系 17 class Book(models.Model): 18 # 默认会创建id 19 name = models.CharField(max_length=32) 20 # 中介模型,手动指定第三张中间表是Book2Author 21 authors=models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author')) 22 class Author(models.Model): 23 name = models.CharField(max_length=32) 24 def __str__(self): 25 return self.name 26 class Book2Author(models.Model): 27 id = models.AutoField(primary_key=True) 28 book=models.ForeignKey(to='Book',to_field='id') 29 author=models.ForeignKey(to='Author',to_field='id') 30 31 -through:来指定我的第三张表是哪个 32 -through_fields:('book','author'),第一个值是:从中间表找到设置关联字段的表,通过哪个字段,第一个位置就写它 33 -终极总结:防止混了:关联字段就是表名小写,第一个值:就是当前表的表名小写 34 -查询,新增,删除,都很方便 35 -第三张表,可以添加别的字段