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 -第三张表,可以添加别的字段