手动创建第三张表

 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             -第三张表,可以添加别的字段
原文地址:https://www.cnblogs.com/xuqidong/p/12109601.html