Django的orm中多对多外键的三种创建方式
1 from django.db import models
2
3 # 全自动:利用orm自动帮我们创建第三张关系表
4
5 class Book(models.Model):
6 name = models.CharField(max_length=32)
7 authors = models.ManyToManyField(to='Author')
8
9 class Author(models.Model):
10 name = models.CharField(max_length=32)
11
12 """
13 优点:代码不需要你写 非常的方便 还支持orm提供操作第三张关系表的方法...
14 不足之处:第三张关系表的扩展性极差(没有办法额外添加字段...)
15 """
16
17
18
19 # 纯手动
20 class Book(models.Model):
21 name = models.CharField(max_length=32)
22
23 class Author(models.Model):
24 name = models.CharField(max_length=32)
25
26 class Book2Author(models.Model):
27 book_id = models.ForeignKey(to='Book')
28 author_id = models.ForeignKey(to='Author')
29 '''
30 优点:第三张表完全取决于你自己进行额外的扩展
31 不足之处:需要写的代码较多,不能够再使用orm提供的简单的方法
32 不建议你用该方式
33 '''
34
35 # 半自动
36 class Book(models.Model):
37 name = models.CharField(max_length=32)
38 authors = models.ManyToManyField(to='Author',
39 through='Book2Author',
40 through_fields=('book','author') # through_field后对应元组,字段先后顺序:当前表是谁,就把对应的关联字段放前面
41 )
42 class Author(models.Model):
43 name = models.CharField(max_length=32)
44 # books = models.ManyToManyField(to='Book',
45 # through='Book2Author',
46 # through_fields=('author','book')
47 # )
48 class Book2Author(models.Model):
49 book = models.ForeignKey(to='Book')
50 author = models.ForeignKey(to='Author')
51
52 """
53 through_fields用元组,字段先后顺序
54 判断的本质:
55 通过第三张表查询对应的表 需要用到哪个字段就把哪个字段放前面
56 你也可以简化判断
57 当前表是谁 就把对应的关联字段放前面
58
59
60 半自动:可以使用orm的正反向查询 但是没法使用add,set,remove,clear这四个方法
61 """
62
63 # 总结:需要掌握的是全自动和半自动 为了扩展性更高 一般我们都会采用半自动(写代码要给自己留一条后路)