Django的orm中多对多外键的三种创建方式

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 # 总结:需要掌握的是全自动和半自动 为了扩展性更高 一般我们都会采用半自动(写代码要给自己留一条后路)

 

posted @ 2022-03-18 22:10  _yessir  阅读(241)  评论(0)    收藏  举报