表关系

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后缀

 

 

 

 
posted on 2024-02-24 19:47  认真的六六  阅读(8)  评论(0)    收藏  举报