表关系
1 图书和出版社是一对多的关系,外键字段在多的一方----book 2 3 图书和作者是多对多的关系 ,需要创建第三张表来存储 4 5 作者与作者详情是一对一的关系

【在django里操作表关系】
(文件配置记得改)
1 from django.db import models 2 3 4 # Create your models here. 5 6 # 创建表关系,先将基表创建出来,然后再添加外键字段 7 class Book(models.Model): 8 title = models.CharField(max_length=32) 9 # DecimalField小数总共8位,其中两位是小数位 10 price = models.DecimalField(max_digits=8, decimal_places=2) 11 # 图书和出版社是一对多,并且书是多的一方,所以外键字段放在书表里面 12 ############ 级联删除,因为版本问题,2.0版本以后必须加on_delete=models.CASCADE############### 13 publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE) # 默认就是与出版社表的主键字段做外键关联 14 ''' 15 图书和作者是多对多的关系,正常是我们要创建第三张表, 16 但是Django提供了第三张表的省略写法,外键字段可以建在任意一方都可以,但是推荐建在查询使用频率较高的一方 17 如果字段对应的是ForeignKey,那么orm会自动在字段的后面加_id 18 哪怕自己开始的时候加了,orm 仍然会在后面继续加_id 19 ''' 20 21 # 告诉图书表和哪张表是多对多的关系即可 22 authors = models.ManyToManyField(to='Author') 23 24 ''' 25 authors是一个虚拟字段,主要是用来告诉orm书籍表和作者表是多对多的关系,让orm自动帮我们创建第三张关系表 26 ''' 27 28 29 # 出版社 30 class Publish(models.Model): 31 name = models.CharField(max_length=32) 32 addr = models.CharField(max_length=32) 33 34 35 # 作者表 36 class Author(models.Model): 37 name = models.CharField(max_length=32) 38 age = models.IntegerField() 39 40 ''' 41 作者与作者详情表是一对一的关系,外键字段建在任意一方都可以,但是推荐建在查询使用频率较高的一方 42 ''' 43 author_detail = models.OneToOneField(to='AuthorDetail', on_delete=models.CASCADE) 44 ''' 45 OneToOneField也会自动给字段加_id后缀, 46 ''' 47 48 49 # 作者详情表 50 class AuthorDetail(models.Model): 51 phone = models.BigIntegerField() # 或者直接用字符类型 52 addr = models.CharField(max_length=50)

总结:
1 ORM中定义三种关系: 2 3 # 级联删除级联更新 4 publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE) 5 # 多对多 6 authors = models.ManyToManyField(to='Author') 7 # 一对一 8 author_detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE) 9 10 11 ForeignKey和OneToOneField会自动在字段后面加_id后缀
浙公网安备 33010602011771号